http ステートレス プロトコルの解決策:
HTTP はステートレス プロトコルです。ステートレス プロトコルでは、サーバーが複数のリクエストにわたって各ユーザーに関する情報や状態を保持する必要はありません。
ただし、一部の Web アプリケーションでは、たとえば、Web サーバーが Web ページのコンテンツをユーザーに合わせてカスタマイズする必要がある場合など、あるページから別のページへのユーザーの進行状況を追跡する必要がある場合があります。このような状況に対する解決策には、
//创建cookie Cookie cookie = new Cookie("username", "admin"); //将cookie响应到浏览器 response.addCookie(cookie);
//获取浏览器发送请求所携带的所有cookie Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie cookie : cookies) { System.out.println(cookie.getName() + "," + cookie.getValue()); } }
/*Cookie cookie = new Cookie("username", "root"); response.addCookie(cookie);*/ Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie cookie : cookies) { if(cookie.getName().equals("username")){ cookie.setValue("zhangsan"); response.addCookie(cookie); } } }
を使用して Cookie の有効時間を設定できます。
a>設定された有効期間が負の整数の場合は効果がありません、つまり、有効期間はブラウザを開いてからブラウザを閉じるまでです。有効時間が 0 の場合、Cookie はすぐに削除されます c> 設定された有効時間が正の整数の場合有効時間が 1 セッションに満たない場合、 Cookie は、指定された時間に達すると、実行中のメモリから自動的に削除されます。有効時間が 1 セッションより長い場合、ブラウザを閉じるときに、Cookie 内のデータがディスクに保存されます。ブラウザが再度開かれると、ディスク内のデータが実行中のメモリに再ロードされます#6. Cookie の有効なパスを設定します
#cookie. setPath();Cookie が作成されてブラウザに応答すると、有効なパスを持つ Cookie が設定され、Cookie は指定されたパスにアクセスする場合にのみ保持されます2. session1.セッションの概念セッションは、サーバー内で作成および維持され、サーバー側に保存されるセッション テクノロジです。セッションのアプリケーション シナリオ: ユーザーのログイン ステータスを記録します2. セッション取得時のパケットの変化を観察する request.getSession() を通じてセッション オブジェクトを取得する このセッションで初めて request.getSession( にアクセスしたとき)セッション オブジェクトを取得すると、キー JSESSIONID を持つ Cookie が応答メッセージに表示されます。リクエストがブラウザを通じてサーバーに送信されるたびに、サーバーが停止している場合でも、この JSESSIONID を持つ Cookie が送信されます。 accessed# この場合、request.getSession() を使用してセッション オブジェクトを再度取得します。リクエスト メッセージに JSESSIONID Cookie が存在する限り、この Cookie は応答メッセージには表示されなくなります
3. セッションの原則
質問:
セッションの原則とは何ですか?
なぜ 1 つのセッションで同じセッションが取得されるのですか?
回答:
request.getSession()でセッションを取得すると、リクエストメッセージにキーJSESSIONIDを持つCookieが取得されます。 JSESSIONID の cookie は、現在のセッションが開始されたばかりで、現在のセッションでセッション オブジェクトを取得するのは初めてであることを示します。このとき、サーバー内にセッション オブジェクトが作成され、キーが JSESSIONID、値が UUID のランダムなシーケンスを持つ Cookie が作成され、作成されたセッション オブジェクトはサーバーが管理するマップ コレクションに保存されます。 UUID のランダム シーケンスをキーとして使用し、セッション オブジェクトを値として使用し、最後に JSESSIONID の Cookie をブラウザーに応答します。
若请求报文中存在键为JSESSIONID的cookie,此时获取该cookie的值,即UUID随机序列,以UUID随机序列为键,从服务器所维护的map集合中就可以获取唯一的session对象
void setAttribute(String name, Object value);
Object getAttribute(String name);
void removeAttribute(String name);
session的时效指在指定时间内,若没有对session进行任何的操作,此时session会自动失效
a>通过web.xml设置,单位是分钟
<session-config> <session-timeout>30</session-timeout> </session-config>
b>通过session.setMaxInactiveInterval()设置,单位是秒
session.setMaxInactiveInterval(1800);
session.invalidate()
session的钝化指服务器关闭,但是浏览器没有关闭,此时session中的数据会被序列化到磁盘上
session的活化指服务器启动,并且浏览器仍然没有关闭,此时会将序列化到磁盘上的数据重新加载到内存中
注意:若session中存储的是实体类对象,此时若要钝化,则该实体类和该实体类的成员变量也都要实现序列化的接口
1、cookie存储在浏览器端,session存储在服务器端,因此cookie相对而言不安全
2、cookie只能存储字符串类型的键值对,session可以存储任意类型的数据,因此若存储相同的数据,cookie可能会产生大量的cookie
3、由于每次浏览器发送请求都会携带cookie,若有大量的cookie,就会造成网络负担
以上がJava で Cookie とセッション テクノロジを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。