セッショントラッキング技術
1会話のトラッキング技術は何ですか
私たちは、会話が何であるかを見てする必要があります!会話は、複数の要求と応答を含むことができ、会議中に、クライアントとサーバの間の会合として理解することができます。サーバは10086人のサービス担当者である一方、たとえば、あなたは10086に電話をかけ、あなたは、クライアントです。瞬間から双方が電話を接続するため、セッションが電話を切るするか、始まったセッションの終わりを示します。通話中に、あなたは、単一のセッションでそのように複数の要求、10086に複数の要求を行うことができます。
顧客の終わりには、ブラウザセッションを閉じまでJavaWebでは、最初のクライアントは、セッションが始まっ開始するためにサーバに要求を送信します。
セッショントラッキング技術であるセッション要求内の共有データの複数。次のように、一例では、セッション要求があります。
リットル要求銀行家。
リットルのログイン要求(リクエストパラメータは、ユーザー名とパスワードです)。
L転送要求(データの転送に関連した要求パラメータ)。
リットルのクレジットカードの支払い要求(支払データに関連付けられたリクエストパラメータ)。
現在のユーザー情報のこの最後のセッションでログインがジョー・スミスであるので、このセッションで共有されなければならない、ジョー・スミスは、それは転送と返済の時に比較的転送や支払いでなければなりません!これは、私たちがセッションでデータを共有する機能を持っている必要があることを示しています。
クッキーまたは完全なを使用して2つのセッションのセッションパス技術
私たちは、HTTPプロトコルは、各要求が独立していることを意味するステートレスなプロトコルであることを知っています!要求前の状態を記録することができません。しかし、HTTPプロトコルには、クッキーのセッショントラッキングを完了するために使用することができます!
JavaWeb、セッショントラッキング、依存基礎となるセッションクッキー技術への完全なセッションで。
クッキー
1クッキー概要
1.1クッキーとは何ですか
中国語に翻訳クッキーは小さなデザート、クッキーの意味です。HTTPでは、クライアントのブラウザ小さなデザートにサーバーを意味します。実際には、クッキーがキーであり、値が構成され、クライアントのブラウザの応答をサーバーに送信されます。そして、クライアントのブラウザは、サーバーと、サーバーに送信されたクッキーにアクセスするために再びクッキー、次の時間を節約します。
クッキーはサーバーによって作成され、その後、鍵のペアに対応することで、クライアントに送信されます。クライアントは、クッキーが保存され、およびクッキー(クッキーサーバ)のソースをマークします。クライアントは、サーバがクライアントを識別することができるように、サーバーへのリクエストに含まれるすべてのサーバーのクッキーを送信するサーバに要求を行うと!
1.2クッキー仕様
Lクッキーのサイズが4KBの限界です。
lのサーバーは、クライアントブラウザ上のクッキー20まで保存します。
lのブラウザは300クッキーまで保存します。
上記のデータは、HTTPのみクッキー仕様ですが、今日のブラウザ戦争では、ブラウザのいくつかの対戦相手を倒すためには、自分の能力の理由を実証するために、あなたは、このような各クッキーの大きさとして、いくつかの「拡張」のクッキー仕様は8キロバイトであるかもしれませんあなたは500クッキーなどまで保存することができます!しかし、それはあなたのハードドライブが表示されません埋めること!
なお、異なるブラウザはクッキーの共有されていません。これは、サーバーにアクセスするためにIEを使用する場合、サーバはIEのCookieが送信されます、そしてあなたは、Firefox、IEを使用してサーバがサーバに保存されたクッキーを送信することはできませんアクセスしたときにアップIEを保存しています。
1.3クッキーとHTTPヘッダー
クッキーと1のHttp協定(理解) *クッキーHTTPプロトコルが制定されました!クッキー保存ブラウザにサーバーによってまず、ブラウザが最後の要求にサーバに要求し、次回は、サーバーに返され、その後、クッキー * 1のキーと値のペアを保存するために、クライアントのブラウザにサーバーによって作成されました!サーバ応答ヘッダに格納されたクッキー:のSet-Cookie:AAA AAAは、セットクッキーを=:BBB BBB = > Response.AddHeader( "のSet-Cookie"、 "AAA AAAを="); Response.AddHeader( "のSet-Cookie"、 " = BBB BBB「); *ブラウザがサーバに要求する場合、サーバはクッキーがサーバにリクエストを送信し保存します。クッキーブラウザ反発リクエストヘッダ:クッキー:= AAA AAA; BBB BBB = *のHttp契約(約束は、ブラウザ上であまりにも多くの圧力を与えない): >最大クッキー4キロバイト > 1セーブで20台のサーバーまでブラウザへクッキー > 1ブラウザが300クッキーまで保存することができます *ブラウザウォーズ:ブラウザの競争は非常にエキサイティングなので、非常に多くのブラウザが一定の範囲内でHTTPの規定に違反しているが、クッキーは4GBですせません! 2.クッキーの使用 *クッキーサーバは、クライアントの状態を追跡するために使用しています! *保存カート(それはより多くのユーザーがサーバー情報にリクエストを送信しているため、商品のショッピングカートは、要求を保存するために使用することはできません) *は、最後のログイン名(また、複数のユーザー要求)を表示します **********クッキーは、クロスブラウザではありません!*********** 3 JavaWeb使用クッキー *元の実施例(こちら): >応答用いて送信するSet-Cookieレスポンスヘッダ 要求取得を使用して>クッキー要求ヘッダ *(最高)の便利な方法: >使用repsonseブラウザのクッキー保存する.addCookie()メソッド を返すために、ブラウザのクッキーを取得するには>ユースrequest.getCookies()メソッドを クッキーの最初のケースを: > JSPのクッキーを保存し、a.jsp > JSP返された別のブラウザのクッキーを取得します!b.jsp
<H1>保存クッキー</ H1> <% クッキークッキー=新しいクッキー( "AAA"、 "AAA")。 response.addCookie(クッキー); クッキーcookie2 =新しいクッキー( "BBB"、 "BBB")。 response.addCookie(cookie2)。 %>
<H1>获取クッキー</ H1> <% クッキー[]クッキー=のrequest.getCookies()。 もし(ヌル=クッキー!){ (クッキークッキー:クッキー)について{ out.print(cookie.getValue()+ " "+ cookie.getName()+" <BR>"); } } %>
1.4クッキーカバレッジ
もし、サーバ、その後送信クッキーが古いクッキーが上書きされます繰り返し、例えば、サーバから送信された最初のクライアント要求はクッキーです:のSet-Cookie:A = A; 2番目の要求はサーバによって送信されます。Set-Cookieの: A = AA、クライアント、去るのみクッキー、すなわち:A = AA。
2クッキーの人生
2.1クッキーの人生は何ですか
クッキーは、ただ名前と値、クッキーはまだ人生を持っていません。人生は、クライアントの有効時にクッキーと呼ばれ、クッキーはsetMaxAge(int型)で有効な時間を設定することができます。
リットルのcookie.setMaxAge(-1):MAXAGEのデフォルトのCookie属性値は、ブラウザのメモリに生き残っ-1、です。あなたがブラウザウィンドウを閉じると、クッキーは消えます。
リットルのcookie.setMaxAge(* 60 60):クッキーオブジェクトを1時間生き残ることができますを示しています。人生は0よりも大きい場合には、クッキーのブラウザは、ハードドライブに保存されます、あなたは、ブラウザを閉じても、でも、クライアントコンピュータを再起動し、クッキーは一時間を生き残るでしょう。
リットルのcookie.setMaxAge(0):0に等しいクッキーの寿命は、クッキーを表し特別な値が無効です!元のブラウザはクッキーを保存している場合つまり、あなたはsetMaxAgeクッキークッキーの(0)することで、これを削除することができています。クライアントのブラウザのメモリ、またはハードディスク内かどうかは、クッキーを削除します。
2.2
ケース2.3:最終アクセス時刻を表示します
lはlasttimeと呼ばれるクッキーを、作成し、現在時刻が応答に追加されます。
AServletで命名リットル取得要求lasttimeクッキー。
リットルは何も出力出力は「このサイトへの訪問の時間はXXXです」がある場合は、「このサイトを訪問するあなたの最初の時間ですが、」存在しない場合。
AServlet.java
公共 のボイドのdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答) スロー ServletExceptionが、IOExceptionが{ response.setContentType( "テキスト/ HTML;のcharset = UTF-8");
クッキークッキー= 新しいクッキー( "lasttime"、新しい日付()のtoString()); [崔1】 cookie.setMaxAge(60 * 60)。[崔2] response.addCookie(クッキー); [崔3]
クッキー[] CS = request.getCookies()。[崔4] 文字列s =「あなたは、このサイトを訪問する最初のです!」。 もし(CS!= NULL){ [崔5] 用 {(CSクッキーC)[崔6] もし(c.getName()。等号( "lasttime")){ [崔7] S = "あなたの最後の訪問時間は:" + c.getValue(); [崔8] } } }
response.getWriter()プリント(S)。【崔9] } |
[1キュイ] lasttime呼ばれるクッキーオブジェクトを作成し、現在の時刻であります
[CUI 2] 1時間のセットクッキークライアントの有効時間
[キュイ3]はクッキーに応答して添加しました
[キュイ4]取得要求クッキー
[5キュイ]要求クッキー場合に存在します
【キュイ6]クッキー要求をループ
[7崔] Cookieというlasttimeの場合
【キュイ8]セットS
[崔9]打印s到响应端
3 Cookie的path
3.1 什么是Cookie的路径
现在有WEB应用A,向客户端发送了10个Cookie,这就说明客户端无论访问应用A的哪个Servlet都会把这10个Cookie包含在请求中!但是也许只有AServlet需要读取请求中的Cookie,而其他Servlet根本就不会获取请求中的Cookie。这说明客户端浏览器有时发送这些Cookie是多余的!
可以通过设置Cookie的path来指定浏览器,在访问什么样的路径时,包含什么样的Cookie。
3.2 Cookie路径与请求路径的关系
下面我们来看看Cookie路径的作用:
下面是客户端浏览器保存的3个Cookie的路径:
a: /cookietest;
b: /cookietest/servlet;
c: /cookietest/jsp;
下面是浏览器请求的URL:
A: http://localhost:8080/cookietest/AServlet;
B: http://localhost:8080/cookietest/servlet/BServlet;
C: http://localhost:8080/cookietest/servlet/CServlet;
l 请求A时,会在请求中包含a;
l 请求B时,会在请求中包含a、b;
l 请求C时,会在请求中包含a、c;
也就是说,请求路径如果包含了Cookie路径,那么会在请求中包含这个Cookie,否则不会请求中不会包含这个Cookie。
l A请求的URL包含了“/cookietest”,所以会在请求中包含路径为“/cookietest”的Cookie;
l B请求的URL包含了“/cookietest”,以及“/cookietest/servlet”,所以请求中包含路径为“/cookietest”和“/cookietest/servlet”两个Cookie;
l B请求的URL包含了“/cookietest”,以及“/cookietest/jsp”,所以请求中包含路径为“/cookietest”和“/cookietest/jsp”两个Cookie;
3.3 设置Cookie的路径
设置Cookie的路径需要使用setPath()方法,例如:
cookie.setPath(“/cookietest/servlet”);
如果没有设置Cookie的路径,那么Cookie路径的默认值当前访问资源所在路径,例如:
l 访问http://localhost:8080/cookietest/AServlet时添加的Cookie默认路径为/cookietest;
l 访问http://localhost:8080/cookietest/servlet/BServlet时添加的Cookie默认路径为/cookietest/servlet;
l 访问http://localhost:8080/cookietest/jsp/BServlet时添加的Cookie默认路径为/cookietest/jsp;