7層モデルのネットワークでは、セッション層は、起動制御し、セッションを終了する方法を定義するトランスポート層の上方に位置しています。7層モデルは、理論的な段階に現在あるが、Webは、そのうちのいくつかのアイデアを借りました。最初のWebブラウザではオフにこれまで一つのセッションとしてカウント1まで開始するサーバーにリクエストを送信します。HTTPプロトコル自体は、Webサービスは1つのセッションでこの要求にそれをするかどうかを知る方法、その後、状態はありませんか?ウェブは、クッキーとセッション2つの技術を提供します。
最初のサーバがリクエストを受信した後、HTTPレスポンスヘッダがSet-Cookie
後に、Cookie値を設定し、ブラウザが応答を受信し、ローカルにクッキーを保存します。後続の要求は、その後、HTTPリクエストヘッダ内に設けられている場合Cookie
の値は、サーバはこのクッキーに応じてステータス要求を識別する。
クッキー値自体は、例えば、キーと値のペアであります Cookie: name=value;
サーブレットクッキーの使用
サーブレットでは、クッキーを使用して、次のステップ:
- Cookieオブジェクトを作成します。
new Cookie(String name, String value)
- ブラウザにクッキーを送信
response.addCookie(Cookie)
- ブラウザがクッキーの上送信し取得します
request.getCookies()
リターンすべてのクッキー - クッキーを通過するすべてのクッキーオブジェクトを取得します。
- コール
Cookie.getName()
、Cookie.getValue()
クッキーのキーと値を取得します
次のように注意があります:
- 一つは、response.addCookieへの複数の呼び出しを複数のクッキーを返すことができます
- ブラウザのデフォルトのクッキーが失敗閉じていますが、クッキーの有効期限を設定することができます
クッキーは、セッションを識別するが、乱用しないように使用することが、クッキーが最初のブラウザに格納されているので、自動的にクローラは、一般的に行わログ行われ、偽造することができ、第二のブラウザクッキーのサイズは、単一のために制限されています一般的に4KB。ブラウザはまた、単一のCookieドメイン名に限定されていると同時に、デフォルトは20です。以来クッキー自体は、メインコースとして少ない材料、一般的には、小さなビスケット材料のようではありません。
セッション
予想通り、一般的に小さなクッキーは、セッション識別子として、セッションの使用がより一般的です。
これらの制限は、セッションはクッキーと比較して、セッションクッキーなし、サーバー側に保存されています。
原則
セッションCookieのベースとなって実現します。
- 最初の呼び出しでrequest.getSessionセッションが、何のクッキークッキーは、メモリ内の新しいオブジェクトを作成しません取得するには、名前のJSESSION値は固有のID、セッションの一意の識別子です
- JSESSION = ID:クライアントへの応答は、クッキー値、のSet-Cookieが含まれます場合には
- 次回は、サーバーへのクッキーのリクエストヘッダとして他のリソースになり、Webブラウザをご覧ください。
- セッションIDに応じてメモリからクッキーの値からサーバIDを削除し、対応するオブジェクトを見つけます
使用するHttpSession session = request.getSession();
Sessionオブジェクトを取得するには
機能一覧
次のように共通のセッションオブジェクト機能は次のとおりです。
public Object getAttribute(String name); //该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。
public Enumeration getAttributeNames(); //该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。
public long getCreationTime(); //该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
public String getId(); //该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。
public long getLastAccessedTime(); //该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
public int getMaxInactiveInterval(); //该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。
public void invalidate(); //该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
public boolean isNew(); //如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。
public void removeAttribute(String name); //该方法将从该 session 会话移除指定名称的对象。
public void setAttribute(String name, Object value); //该方法使用指定的名称绑定一个对象到该 session 会话。
public void setMaxInactiveInterval(int interval); //该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。