Cookie/セッションの仕組みの詳しい説明_html/css_WEB-ITnose
セッション追跡は、Web プログラムで一般的に使用されるテクノロジーであり、ユーザーのセッション全体を追跡するために使用されます。一般的に使用されるセッション追跡テクノロジは、Cookie とセッションです。 Cookieはクライアント側で情報を記録することでユーザーの身元を特定します、Sessionはサーバー側で情報を記録することでユーザーの身元を特定します。
この章では、Cookieとセッションの仕組みを体系的に説明し、Cookieが使用できない場合とセッションが使用できない場合を比較して説明します。
1.1 Cookie のメカニズム
プログラムでは、セッションの追跡が非常に重要です。理論的には、あるユーザーのすべてのリクエスト操作は同じセッションに属する必要があります、一方、別のユーザーのすべてのリクエスト操作は別のセッションに属する必要があり、この 2 つを混同することはできません。たとえば、ユーザー A がスーパーマーケットで購入した商品は、ユーザー A がいつ購入したとしても、同じセッションに属しており、ユーザー B やユーザー C のショッピング カートに入れることはできません。同じセッションに属していません。
Web アプリケーションは HTTP プロトコルを使用してデータを送信します。 HTTP プロトコルはステートレス プロトコルです。データ交換が完了すると、クライアントとサーバー間の接続が切断され、再度データを交換するには新しい接続を確立する必要があります。これは、サーバーが接続からセッションを追跡できないことを意味します。つまり、ユーザー A がアイテムを購入し、それをショッピング カートに入れます。そのアイテムが再度購入されると、サーバーはその購入がユーザー A のセッションに属するかユーザー B のセッションに属するかを判断できません。このセッションを追跡するには、メカニズムを導入する必要があります。
Cookieはそのような仕組みです。これにより、HTTP プロトコルのステートレスな欠点を補うことができます。 Session が登場する前は、基本的にすべての Web サイトはセッションを追跡するために Cookie を使用していました。
1.1.1 Cookie とは
Cookie とは「甘いクッキー」を意味し、W3C 組織によって提案され、Netscape コミュニティによって最初に開発されたメカニズムです。現在、Cookie は標準となっており、IE、Netscape、Firefox、Opera などの主流ブラウザはすべて Cookie をサポートしています。
HTTP はステートレス プロトコルであるため、サーバーはネットワーク接続だけからクライアントの ID を知る方法がありません。どうやってするの? クライアントにパスを発行します。誰が訪問しても、各自のパスを持参する必要があります。このようにして、サーバーはパスからクライアントの ID を確認できます。これがクッキーの仕組みです。
Cookie は実際には短いテキスト情報です。クライアントはサーバーに要求し、サーバーがユーザーのステータスを記録する必要がある場合、応答を使用してクライアントのブラウザーに Cookie を発行します。クライアントのブラウザは Cookie を保存します。ブラウザが Web サイトを再度リクエストすると、ブラウザはリクエストされた URL を Cookie とともにサーバーに送信します。サーバーはこの Cookie をチェックしてユーザーのステータスを識別します。サーバーは必要に応じて Cookie の内容を変更することもできます。
Web サイトによって発行された Cookie を確認するのは簡単です。ブラウザのアドレスバーに javascript:alert (document.cookie) と入力するだけです (表示するにはインターネット接続が必要です)。図 1.1 に示すように、JavaScript スクリプトはダイアログ ボックスをポップアップ表示し、この Web サイトによって発行されたすべての Cookie の内容を表示します。
図 1.1 Baidu Web サイトが発行する Cookie
図 1.1 に示すポップアップ ダイアログ ボックスは Baidu Web サイトの Cookie です。 BAIDUID の最初の行には、作成者の ID helloweenvsfei が記録されていますが、Baidu は特別な方法を使用して Cookie 情報を暗号化します。
注: Cookie 機能にはブラウザのサポートが必要です。
ブラウザがCookieをサポートしていない場合(ほとんどの携帯電話のブラウザなど)、またはCookieが無効になっている場合、Cookieの機能は無効になります。
ブラウザが異なると、Cookie を保存する方法も異なります。
IE ブラウザは、「C:Documents and Settings Your Username Cookies」フォルダーにテキスト ファイルとして保存します。各テキスト ファイルには 1 つの Cookie が保存されます。
1.1.2 ユーザーの訪問数を記録します
Java では、Cookie は javax.servlet.http.Cookie クラスにカプセル化されます。各 Cookie は、この Cookie クラスのオブジェクトです。サーバーは、Cookie クラスのオブジェクトを操作することによって、クライアントの Cookie を操作します。 request.getCookie() を介してクライアントによって送信されたすべての Cookie を取得し (Cookie[] 配列の形式で返されます)、response.addCookie(Cookiecookie) を介してクライアントに Cookie を設定します。
Cookie オブジェクトは、キーと値の属性ペアを使用してユーザーのステータスを保存します。1 つの Cookie オブジェクトは 1 つの属性ペアを保存し、1 つのリクエストまたは応答で複数の Cookie を同時に使用します。 Cookie クラスは javax.servlet.http.* パッケージの下にあるため、このクラスを JSP にインポートする必要はありません。
1.1.3 Cookie はドメイン名を越えることはできません
多くの Web サイトで Cookie が使用されています。たとえば、Google はクライアントに Cookie を発行しますし、Baidu もクライアントに Cookie を発行します。 Google にアクセスするときに、ブラウザには Baidu が発行した Cookie も含まれますか?それとも、Baidu が発行した Cookie を Google が変更できるのでしょうか?答えはノーです。 Cookie はドメイン名を越えることはできません。 Cookie の仕様によれば、ブラウザが Google にアクセスすると、Google の Cookie のみが送信され、Baidu の Cookie は送信されません。 Google は Google の Cookie のみを操作できますが、Baidu の Cookie は操作できません。
Cookieはクライアント側のブラウザによって管理されます。ブラウザは、Google が Baidu の Cookie ではなく Google の Cookie のみを操作することを保証できるため、ユーザーのプライバシーとセキュリティが確保されます。ブラウザは、ドメイン名に基づいて、Web サイトが別の Web サイトの Cookie を操作できるかどうかを判断します。 Google と Baidu のドメイン名は異なるため、Google は Baidu の Cookie を操作できません。
Webサイトimages.google.comとWebサイトwww.google.comはGoogleに属しますが、ドメイン名が異なり、相互のCookieを操作できないことに注意してください。
注: Web サイト www.google.com にログインした後、ユーザーは、images.google.com にアクセスするとログイン情報がまだ有効であることがわかりますが、これは通常の Cookie では不可能です。これはGoogleが特殊な処理を行っているためです。 Cookie はこの章の後半で同様に扱われます。
1.1.4 Unicode エンコード: 中国語を保存
中国語と英語の文字は異なります。中国語は Unicode 文字でメモリ内で 4 文字を占有しますが、英語は ASCII 文字でメモリ内で 2 バイトしか占有しません 。 Cookie で Unicode 文字を使用する場合、Unicode 文字をエンコードする必要があります。エンコードしないと文字化けしてしまいます。
ヒント: Cookie に保存されている中国語の文字のみをエンコードできます。通常、UTF-8 エンコーディングを使用できます。 GBK などの中国語エンコードは、ブラウザーがサポートしていない可能性があり、JavaScript も GBK エンコードをサポートしていないため、使用することはお勧めできません。
1.1.5 BASE64 エンコード: バイナリ画像を保存
Cookie は ASCII 文字と Unicode 文字だけでなく、バイナリ データも使用できます。たとえば、デジタル証明書はセキュリティを提供するために Cookie で使用されます。バイナリデータを扱う場合にもエンコードが必要です。
% 注: このプログラムは、バイナリ コンテンツを Cookie に保存できることを示すためにのみ使用されており、実用的ではありません。ブラウザはサーバーをリクエストするたびに Cookie を送信するため、Cookie の内容が多すぎてはなりません。そうしないと速度に影響します。 Cookie の内容は小さくても正確である必要があります。
1.1.6 Cookie のすべてのプロパティを設定します
名前と値に加えて、Cookie には他にもよく使用されるプロパティがいくつかあります。各プロパティはゲッター メソッドとセッター メソッドに対応します。 Cookie クラスのすべてのプロパティを表 1.1 に示します。
表 1.1 Cookie の共通属性
属性プロパティ名 | 説明 | |||||||||||||||||||||||||||||||
文字列名
| このクッキーの名前。 Cookie が作成されると、その名前は変更できません。
| |||||||||||||||||||||||||||||||
| Cookie の値。値が Unicode 文字の場合、その文字をエンコードする必要があります。値がバイナリ データの場合は、BASE64 エンコードを使用する必要があります。
| |||||||||||||||||||||||||||||||
int maxAge
|
Cookie の有効期限が切れるまでの時間 (秒単位)。正の場合、Cookie は maxAge 秒後に期限切れになります。負の数の場合、Cookie は一時的な Cookie であり、ブラウザを閉じると無効になり、ブラウザはいかなる形式でも Cookie を保存しません。 0の場合はCookieを削除することを意味します。デフォルトは?1です。
| |||||||||||||||||||||||||||||||
| このCookieが安全なプロトコルを使用してのみ送信されるかどうか。セキュリティプロトコル。セキュリティ プロトコルには、ネットワーク上で送信する前にデータを暗号化する HTTPS、SSL などが含まれます。デフォルトは false です
| |||||||||||||||||||||||||||||||
| この Cookie で使用されるパス。 「/sessionWeb/」に設定すると、contextPath が「/sessionWeb」であるプログラムのみが Cookie にアクセスできます。 「/」に設定すると、このドメイン名の contextPath によって Cookie にアクセスできます。最後の文字は「/」である必要があることに注意してください。
| |||||||||||||||||||||||||||||||
| Cookie にアクセスできるドメイン名。 「.google.com」に設定すると、「google.com」で終わるすべてのドメイン名がこの Cookie にアクセスできます。最初の文字は「.」である必要があることに注意してください。ブラウザは Cookie 情報を表示するときにこの説明を表示します
| |||||||||||||||||||||||||||||||
| Cookie で使用されるバージョン番号。 0 は Netscape の Cookie 仕様に従うことを意味し、1 は W3C の RFC 2109 仕様に従うことを意味します
|
<%= person.getName()%> |
メソッド名 | 説明 | ||
void setAttribute(String 属性, Object value)
| セッションのプロパティを設定します。 value パラメータには任意の Java オブジェクトを指定できます。通常は Java Bean です。値の情報は大きすぎてはなりません
| ||
String getAttribute(String 属性)
| セッション属性を返す
| ||
| セッション内に存在する属性名を返します
| ||
| セッション属性を削除
| ||
| セッションのIDを返します。この ID はサーバーによって自動的に作成され、繰り返されることはありません
| ||
| セッションの作成日を返します。戻り値の型はlong型で、多くの場合Date型に変換されます。例: Date createTime = new Date(session.get CreationTime())
| ||
| 最後のアクティブ時間を返します。セッション。戻り値の型はlongです
| ||
| セッションのタイムアウト期間を返します。単位は秒です。この時間を過ぎてもアクセスがない場合、サーバーはセッションが無効であるとみなします
| ||
| セッションのタイムアウトを設定します。単位は秒です
| ||
| 非推奨のメソッドです。 setAttribute(String Attribute, Object Value)
| ||
| 非推奨のメソッドに置き換えられました。 getAttribute(String attr) に置き換えられました
| ||
| セッションが新しく作成されたかどうかを返します
| ||
| セッションを無効にする
|
ホームページ | < /td> ページのリダイレクト (Redirection) の場合、URL アドレスの書き換えは次のように記述できます: <% if("administrator".equals(userName)) { response.sendRedirect(response) .encodeRedirectURL( "administrator.jsp")); return; 、書き換えられたアドレスを jsessionid 文字列で返します。 WAP プログラムの場合、ほとんどのモバイル ブラウザは Cookie をサポートしていないため、WAP プログラムは URL アドレスの書き換えを使用してユーザー セッションを追跡します。たとえば、UFIDA グループのモバイル ショッピング モール。
注: TOMCAT は、リクエストに Cookie が含まれるかどうかに基づいて、クライアントのブラウザが Cookie をサポートするかどうかを判断します。クライアントは Cookie をサポートしている可能性がありますが、最初のリクエストでは Cookie が送信されないため (送信する Cookie がないため)、書き換えられた URL アドレスには jsessionid が含まれたままになります。 2回目のアクセス時はサーバーがブラウザにCookieを書き込んでいるため、書き換え後のURLアドレスにはjsessionidは含まれません。
1.2.8 Session での Cookie の使用は禁止されています WAP 上のほとんどのクライアント ブラウザは Cookie をサポートしていないため、単純に Session での Cookie の使用を禁止し、一律に URL アドレス書き換えを使用する方がよいでしょう。 Java Web 仕様では、構成による Cookie の無効化がサポートされています。ここでは、設定を通じて Cookie の使用を無効にする方法の例を示します。 プロジェクト sessionWeb の WebRoot ディレクトリにある META-INF フォルダーを開き (WEB-INF フォルダーと同じレベル、存在しない場合は作成します)、context.xml を開きます (存在しない場合は作成します)。コンテンツを次のように編集します: Code 1.11 /META-INF/context.xml < ;/Context>
または、Tomcat のグローバル conf/context.xml を変更して、内容を次のように変更します: Code 1.12 context.xml Context> 展開後、TOMCAT は JSESSIONID Cookie という名前を自動的に生成しません。Session は Cookie を識別マークとして使用せず、書き換えられた URL アドレスのみを識別マークとして使用します。
注: この設定は、セッションが識別マークとして Cookie を使用することを禁止するだけであり、他の Cookie の読み取りと書き込みは妨げられません。つまり、サーバーは JSESSIONID という名前の Cookie を自動的に維持しませんが、他の Cookie は引き続きプログラムで読み書きできます。 http://blog.csdn.net/fangaoxin/article/details/6952954 |

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

この記事では、html5&lt; time&gt;について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。
