JavaA2Z

KAB-studio > プログラミング > JavaA2Z > セッションとは

セッション

日本語 対話期間
英語 session
ふりがな せっしょん
フリガナ セッション

解説

WebアプリケーションWebブラウザが「一定時間結びつく」システム。
 
ブラウザとWebアプリケーションは、リクエスト単位で接続される。
つまり、リクエストを発し、HTML等が返されると、接続がそこで切れる。
接続はリクエスト単位のため、Webアプリケーションは、二度目のリクエストで「前回接続したブラウザか」ということが分からない。
そのため、たとえば「最初のリクエストで入力された情報をメモリ上に取っておき、次のリクエストでそれを出力する」ということができない。
 
この問題を解決するのが「セッション」である。
Webアプリケーションは、「セッションID」という十分に長いランダム文字列を、クッキーに格納するかリクエストパラメーターに付加する。
このセッションIDWebアプリケーションはブラウザを識別し、「前回接続したブラウザ」ということが分かる。
そのため、ブラウザとWebアプリケーションが「結びつく」ことになり、ブラウザから入力された情報をメモリ上に取っておくことができる。
 
セッションに格納する情報は、HashMapクラスのよう「辞書」構造を持ち、「名前」と「値」によって管理される。
「値」の登録時に「名前」を指定する。「名前」を渡して「値」を取得する。
 
セッションは、一定時間リクエストがないと削除される。これを「セッションタイムアウト」という。
これは、セッションは「セッションID」という文字列によって結び付けられているためである。
もしセッションが永遠に続くと、セッションIDとしてランダム文字列を片っ端から試すことで、「誰か」のセッションIDに一致して、「誰か」の情報を取得できてしまうからである。
その問題を防ぐため、セッションIDは一定時間リクエストのないと削除される。
「一定時間」は、通常30分とする。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*   サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
    /**
     * リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
     */
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
    {
        // Content-Typeをセット。
        response.setContentType( "text/html;charset=Windows-31J" );

        // HttpSessionを取得します。
        HttpSession session = request.getSession( true );
        // セッションから、「value」の名前で登録されているデータを取得します。
        String value = (String)session.getAttribute( "value" );
        // 追記します。
        value += "/ばりゅー";
        // 「value」の名前でセッションに登録します。
        session.setAttribute( "value", value );

        // セッションIDを出力します。
        System.out.println( session.getId() );
        // DD2827F78048A6D90EF4B71A10AF97AF

        // HTML出力用のPrintWriterを取得します。
        PrintWriter out = response.getWriter();

        // HTMLを出力します。
        out.println( "<HTML>" );
        out.println( "<HEAD>" );
        out.println( "<TITLE>サーブレットのテスト</TITLE>" );
        out.println( "</HEAD>" );
        out.println( "<BODY>" );
        out.println( value );
        out.println( "</BODY>" );
        out.println( "</HTML>" );
        // null/ばりゅー/ばりゅー/ばりゅー/ばりゅー/ばりゅー
        // ……と、リロードするたびに増えていきます。
    }
}
// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*   サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
    /**
     * リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
     */
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
    {
        // Content-Typeをセット。
        response.setContentType( "text/html;charset=Windows-31J" );

        // HttpSessionを取得します。
        HttpSession session = request.getSession( true );
        // セッションから、「value」の名前で登録されているデータを取得します。
        String value = (String)session.getAttribute( "value" );
        // 追記します。
        value += "/ばりゅー";
        // 「value」の名前でセッションに登録します。
        session.setAttribute( "value", value );

        // セッションIDを出力します。
        System.out.println( session.getId() );
        // DD2827F78048A6D90EF4B71A10AF97AF

        // HTML出力用のPrintWriterを取得します。
        PrintWriter out = response.getWriter();

        // HTMLを出力します。
        out.println( "<HTML>" );
        out.println( "<HEAD>" );
        out.println( "<TITLE>サーブレットのテスト</TITLE>" );
        out.println( "</HEAD>" );
        out.println( "<BODY>" );
        out.println( value );
        out.println( "</BODY>" );
        out.println( "</HTML>" );
        // null/ばりゅー/ばりゅー/ばりゅー/ばりゅー/ばりゅー
        // ……と、リロードするたびに増えていきます。
    }
}

この単語を含むページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/10/22
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。