序文
セッションを使用して、javaweb プロジェクトはログイン ステータスの制御を実装します。セッションと Cookie の組み合わせは、ユーザーのログイン状態を監視するために使用されます。この記事では主にインターネット上のセッションと Cookie の原理と応用についてまとめていますので、皆様のお役に立てれば幸いです。
1. 分析原理
ブラウザがシステムにアクセスすると、リクエストはリクエストに含まれる jssessionid を解析し、それを使用してアプリケーション内に存在するセッションを見つけます。ただし、セッションが見つからない場合は、セッション作成メソッドが呼び出され、新しい jssessionid が取得されます。が生成され、セッションが返されます。(以下のスクリーンショットはオンライン ブログ https://my.oschina.net/mingyuelab/blog/2986928 著者: Qianli Mingyue から引用)
クライアントが初めてサーバー システムにアクセスすると、システムはセッションを生成します。応答には応答ヘッダー Set-Cookie が設定され、その値は JESSIONID=xxx になります。このようにして、ブラウザは localhost:8080 と Cookie の間の接続を記憶し、それを保存してデバッグ ツールで確認できるようになります。
次に http://localhost:8080/txx に再度アクセスすると、ブラウザは jsession を含む Cookie 情報をリクエスト ヘッダーに積極的に追加します。
レスポンスヘッダーに set-cookie を含める操作と、jsession を含む Cookie 情報を追加する 2 つの操作は、ブラウザによって自動的に完了することに注意してください。
では、バックエンド開発中に同じユーザーかどうかを識別するには何をする必要があるのでしょうか?
実際、Java で開発すると、サーバーはブラウザからログイン要求を受信した後に自動的にメモリを作成し、このメモリを指すセッション オブジェクトを生成し、このセッションを指すセッション ID を生成します。つまり、セッション ID -> セッション -> メモリ、これが javaWeb の役割です。次に、バックエンド コードがユーザー名とパスワードが正しいことを検証した後、ユーザー関連情報をセッションのメモリに保存できます。
//密码验证正确后,在session中存储登录的用户名
session.setAttribute("user","张三");
//退出登录后,移除用户名
session.removeAttribute("user");
2. 申請
1. サーバー上にセッションを保存するには、メモリ、データベース、ファイルなど、さまざまな方法があります。クラスタリングの際には、セッション転送も考慮する必要があります。大規模な Web サイトでは、通常、ユーザー セッションを保存するための専用のセッション サーバー クラスタが存在します。このとき、セッション情報はメモリに保存され、Memcached などのいくつかのキャッシュ サービスが使用されます。セッション。
2. クライアントのブラウザが Cookie を無効にすると、URL 書き換えテクノロジをセッション追跡に使用できます。つまり、HTTP インタラクションごとに、sid=xxxxx などのパラメータが URL に追加され、サーバーはそれに応じて URL を識別します。 。