1.セッションの簡単な紹介
WEB開発では、サーバーはユーザーのブラウザごとにセッションオブジェクト(セッションオブジェクト)を作成できます注:ブラウザはセッションオブジェクトを独占します(デフォルト)。したがって、ユーザーデータを保存する必要がある場合、サーバープログラムはユーザーデータをユーザーのブラウザー専用のセッションに書き込むことができます。ユーザーがブラウザーを使用して他のプログラムにアクセスすると、他のプログラムはユーザーのセッションからユーザーのデータを取得できます。ユーザーサービス。
ここでは、Javaサーブレットに基づくセッションの概念と原理を理解します。Javaでは、HTTPのセッションオブジェクトはjavax.servlet.http.HttpSessionで表されます。
2.セッションとCookieの違い
- Cookieはユーザーのデータをユーザーのブラウザーに書き込むためのものです
- セッションは、ユーザーの排他的セッションにユーザーデータを書き込むことです
- セッションオブジェクトはサーバーによって作成されます。開発者は、リクエストオブジェクトのGetSessionメソッドを呼び出して、セッションオブジェクトを取得できます。
3.セッション実装原理
サーバーは、ユーザーのブラウザーにサービスを提供するセッションをどのように実装しますか?
最初のアクセス中に、サーバーは新しいセッションを作成し、Cookieの形式でセッションIDをクライアントのブラウザーに送信します。サーバーがセッションを作成した後、サーバーはセッションIDをCookieの形式でクライアントに書き戻します。このように、クライアントのブラウザーが閉じられていない限り、サーバーにアクセスすると、セッションIDが取得されます。クライアントブラウザにセッションIDが付属している場合は、メモリ内の対応するセッションを使用してサービスを提供します。
4. Sessionオブジェクトの作成と破棄
4.1 Sessionオブジェクトの作成
//范例:创建session
//使用request对象的getSession()获取session,如果session不存在则创建一个
HttpSession session = request.getSession();
//获取session的Id
String sessionId = session.getId();
//判断session是不是新创建的
if (session.isNew()) {
response.getWriter().print("session创建成功,session的id是:"+sessionId);
}else {
response.getWriter().print("服务器已经存在session,session的id是:"+sessionId);
}
4.2 Sessionオブジェクトの破棄
1)セッションタイムアウト:タイムアウトとは、サーバーがセッションに対応するクライアントのリクエストを一定期間受信せず、この時間がサーバーによってセッションタイムアウトに設定された最大時間を超えていることを意味します。
2)プログラムがHttpSession.invalidate()を呼び出す
3)サーバーがシャットダウンするか、サービスが停止する
ブラウザが閉じているため、セッションは削除されますか?
いいえ、セッションは上記の方法でのみ閉じられます。
メソッド1、2は次のとおりです。
セッションオブジェクトはデフォルトで30分間使用されません。サーバーは自動的にセッションを破棄します。web.xmlファイルでセッションの有効期限を手動で設定できます。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 设置Session的有效时间:以分钟为单位-->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</web-app>
プログラムでセッションを手動で無効にする必要がある場合は、手動でsession.invalidateメソッドを呼び出してセッションを破棄できます。
HttpSession session = request.getSession();
//手工调用session.invalidate方法,摧毁session
session.invalidate();
5.セッションの場所
サーバーのメモリ内(サーバーが折りたたまれ、すべてのセッションが消えた)。ただし、セッションは特別な方法で管理できます(ディスクにセッションを置く)。
6.セッションIDはどこから来たのですか
sessionIDの使用方法:クライアントが最初にセッションオブジェクトを要求すると、サーバーはクライアントのセッションを作成します( セッションはメモリリソースを消費するため、セッション作成時間です。したがって、セッションを使用するつもりがない場合は、 JSPは、それをオフにします。 )、およびブラウザ次回(セッションが有効であり続けるが)他のリソースを要求するときに、セッションオブジェクトを識別するために、特別なアルゴリズムのセッションIDを計算し、ブラウザが密かにセッションID意志リクエストヘッダーに配置され、サーバーはリクエストを受信した後にリクエストsessionIDを受信し、IDを持つセッションを見つけてリクエスタに返します==(サーブレット)==(jspはサーブレットにコンパイルされるときにリクエストセッションオブジェクトメソッドに挿入されます:HttpSessionセッション= HttpServletRequest.getSession(true))が使用されます。1つのセッションに対して存在できるセッションオブジェクトは1つだけです。そのセッションでは、IDのみが認識されません。
7.その他の問題のセッション
- セッションは、セッション中に任意のオブジェクトを格納できるコンテナです。
- セッションは要求(要求オブジェクト)のために生成されます。同じセッション内の複数の要求は、要求から直接取得できるセッションオブジェクトを共有します。
- 実際、セッションの作成と使用は常にサーバー上で行われ、ブラウザがセッションオブジェクトを取得することはありません。ただし、ブラウザはサーブレット(jspもサーブレット)を要求して、セッション情報を取得できます。クライアントブラウザが実際に取得するのはセッションIDであり、これはブラウザを操作する人には見えません。ユーザーは自分がどのセッションにいるかを気にする必要はありません。
リファレンス:JavaWeb Learning-Session