JavaWeb(6):セッションと状態管理

 

HTTPプロトコルは、ブラウザによって送信された要求である同じように認識することができないステートレスプロトコル、WEBサーバ自体であり、各ブラウザ要求が完全に分離されています。でも、HTTP1.1は、持続的接続をサポートしていますが、ユーザーはいくつかの時間のために要求を提出していない場合、接続が閉じられます。まだオンラインストアのショッピングカートを達成するための方法:Webログインページからユーザーが買い物をする際、次に購入ページを入力し、サインインし、ショッピングが得られ、要求処理プログラム上のユーザー情報を知っている必要があり、要求サーバプログラムを処理する責任があります。
Webサーバとして、機構は、一意のユーザ、同時にユーザの記録状態を識別するために使用されなければなりません。

WEBアプリケーションのセッション要求と応答プロセスのシリーズは、クライアントブラウザとWebサーバー間で連続的に発生しています。WEBアプリケーション・セッション状態はセッション状態によって、WEBサーバの状態情報を参照して、ブラウザは、セッション中に生成され、WEBサーバは、関連付けられた同じセッション中の要求と応答のシリーズの一部であることができます。

同じセッション要求メッセージに属するメッセージを識別するための多数の要求からWebサーバプログラム、すなわち、その両方の同定の各々によって送信されたブラウザ要求メッセージを必要とブラウザからのアクセス要求と認識することができます:要求メッセージが同一のセッションに属する同一の識別番号を指定し、要求メッセージは常に異なるセッションに属するされた異なる識別番号、呼セッションID(セッションID)の識別番号が含まれていました。
サーブレット仕様では、2つのメカニズムがセッション追跡を完了するために使用しました

  • クッキー
  • セッション

A、クッキー

クッキーは、ブラウザでのリソースのWEBサーバへのアクセスがあるときにクッキーメカニズムは、HTTPにブラウザに送信されたメッセージのヘッダに含まれる小さなテキストファイルでWEBサーバの応答によって、HTTPクライアントプログラムの状態情報を維持するために使用されます。WEBブラウザがクッキーを保存したら、それはWEBサーバへの各訪問した後、HTTPリクエストにはクッキーのWEBサーバに引き返すます。
基礎となる原則:HTTP応答メッセージでブラウザにCookie情報に応じて、Set-Cookieヘッダーフィールドを増加させることにより、WEBサーバは、ブラウザがクッキーを増加させることにより、HTTPリクエストメッセージでWEBサーバにCookieヘッダフィールドバックを要求します。
少なくとも名前識別情報(NAME)、および設定値(VALUE)を含む情報を識別のみクッキー、。WEBブラウザを与えることができるWEBサイトは、WEBブラウザは、複数のクッキーWEBサイトが提供し保存することができ、複数のクッキーを送信します。ブラウザは一般のみ300クッキーの保存を可能にする、クッキーは、サイトごとに20まで保存、各クッキーのサイズは4キロバイトに制限されています。

 

 1.1クッキーの共通API

<ページ言語= "javaの" contentTypeの= @% "text / htmlの;のcharset = UTF-8" 
    pageEncodingは = "UTF-8"セッション= "false"に%> 
<!DOCTYPE HTML PUBLIC「 - // W3C // DTD HTML! 4.01移行// EN " "http://www.w3.org/TR/html4/loose.dtd"> 
<HTML> 
<HEAD> 
<META HTTP-当量= "Content-Typeの"コンテンツ=" text / htmlの。文字セット= UTF-8" > 
<タイトル>ここで挿入タイトル</ TITLE> 
</ HEAD> 
<BODY> 
    
    <%// 在JavaWEB规范中使用クッキー类代表クッキー// 1.获取クッキー 
        クッキー[]クッキー= 要求。 getCookies();
        もし(クッキー!= nullを &&
        
        
        
        
        (クッキークッキー:クッキー){
                 // 2.取得クッキーの名前と値 
                Out.print(Cookie.getName()+ ":" + cookie.getValue()); 
                Out.print( "<BR>" ); 
            } 
        } { 
            Out.print(「クッキーことなく、作成され、返される」);
             // クッキーオブジェクト作成 
            クッキークッキー= 新しい新しいクッキー(「名前」、「Aidata」);
             // setMaxAge:最大セットクッキーをそれが0であれば手段は、すぐにクッキーを削除され、秒単位で、老化
             //はそれが負の場合、それはクッキーの保存時間ことを示し、それが正の場合、彼らは、クッキーを保存していないと述べた。 
            クッキー。setMaxAge(30); 
            
            // 2.コールクライアントにクッキー応答の方法。
            Response.addCookie(クッキー); 
        }
    %> 
    
</ BODY> 
</ HTML>

javax.servlet.http.Cookie Cookie情報をカプセル化するサーブレットAPIクラスを提供し、それは様々な属性情報が含まれており、抽出方法クッキークッキー情報を生成します。
Cookieクラスのメソッド:

  • コンストラクタ:公共のクッキー(文字列名、文字列値)
  • getNameメソッド
  • setValueとのgetValueメソッド
  • setMaxAge方法とgetMaxAge
  • SETPATHおよび方法ある、getPath

HttpServletResponseのaddCookieインタフェース定義ブラウザHTTP応答メッセージに送信される応答でSet-Cookieヘッダフィールドを増加させるために使用される方法。
HttpServletRequestのgetCookiesインタフェース定義HTTPクッキーリクエストヘッダフィールドからの要求メッセージである方法は、すべてのエントリクッキーを読み取ります。

 

クッキーて送信

Cookieオブジェクトの作成1.
最大の年齢を設定2.
HTTPレスポンスヘッダーに3.クッキーを
使用すると、クッキーを作成した場合に、それがセッションレベルのクッキーで、デフォルトでは、ブラウザに彼を送信し、ブラウザの店でユーザーがブラウザを終了した後、メモリは、削除されます。あなたはディスク上に保存されたブラウザのクッキーをしたい場合は、MAXAGEを使用する必要があり、秒単位で時間を与えます。最大の制限は0に設定されているクッキーを削除するコマンドブラウザです。
クッキー必要addCookie HttpServletResponseの送信方法、クッキーは、Set-CookieのHTTPレスポンスヘッダに挿入されます。この方法は、以前に指定されたSet-Cookieヘッダーを変更しますが、この方法はかなりますsetcookieよりも、addCookieと呼ばれて、新しいヘッダを作成しませんので。

 

セッションCookieやクッキーの永続性を
使用すると、有効期限を設定しない場合、それは単に近いブラウザウィンドウ、ブラウジングセッション中にクッキーのライフサイクルことを意味し、クッキーが消えました。ブラウザのセッションクッキーの人生のこの期間は、セッションクッキーと呼ばれています。一般的なセッションクッキーはハードディスクに保存されますが、メモリに保存されていません。
あなたは有効期限を設定した場合、ブラウザのクッキーが終了した後、再度ブラウザを開き、お使いのハードドライブに保存されます有効期限が設定を超えるまで、これらのクッキーは有効なまま。
ハードディスク上に格納されたクッキーは、このような二IE窓として、異なるブラウザプロセス間で共有することができます。メモリに保存されたクッキーのために、異なるブラウザは異なるアプローチを持っています。

 

クッキーの読み取り

1.コールrequest.getCookiesが
getCookies HttpServletRequestのメソッドを呼び出すために必要にブラウザによって送信されたクッキーを取得するために、この呼び出しは、クッキーの配列は、Cookieヘッダの値は、HTTP要求のために入力されるべきオブジェクトを返します。
配列の2.循環、あなたが興味のクッキーを見つけるまで、各クッキーについてのgetNameメソッドを呼び出します

 

 

1.2クッキー自動着陸を使用して

あなたは、自動的にシステムにログインすることができ、ユーザー名やパスワードなどの情報を入力する必要はありません。

ランディングページ

login.jspを

<ページ言語= "javaの" contentTypeの= @% "text / htmlの;のcharset = UTF-8" 
    pageEncodingは = "UTF-8" %> 
<!DOCTYPE HTML PUBLIC「 - // W3C // DTD HTML 4.01 // EN暫定! " "http://www.w3.org/TR/html4/loose.dtd"> 
<HTML> 
<HEAD> 
<META HTTP-当量=" Content-Typeの"コンテンツ=" text / htmlの;のcharset = UTF-8 "> 
ここ<タイトル>を挿入タイトル</ TITLE> 
</ HEAD> 
<BODY> 

    <フォームアクション=" index.jspの」メソッド= "ポスト"> 
        
        名前:の<input type = "text" NAME = "名前" /> 
        
        <input type = / "送信" =値"を提出する"> 
    
    </ form>を

</ BODY> 
</ HTML>

ランディングは、index.jspをオンにします

  • 取得リクエストパラメータのログイン名が空でない場合は、歓迎のメッセージをプリントアウトします。クッキー、クッキーにログイン情報を保存し、30Sの最大保存期間を設定するには
  • プリントが歓迎のメッセージがある場合は、ユーザー情報は、クッキーから読み込まれます
  • どちらのパラメータ要求、ないクッキーは、login.jspをリダイレクトする場合
<ページ言語= "Javaの" contentTypeの= "テキスト/ HTML。;のcharset = UTF-8" @%
    pageEncodingは = "UTF-8" %> 
<!DOCTYPE HTML PUBLIC「 - // W3C // HTML 4.01移行// EN DTD "" http://www.w3.org/TR/html4/loose.dtd "> 
<HTML> 
<HEAD> 
<META HTTP-当量="タイプ-コンテンツ"コンテンツ="テキスト/ HTML;のcharset = UTF-8 「> 
ここ<タイトル>挿入タイトル壁紙</ TITLE> 
</ HEAD> 
<BODY> 

    <%// リクエストパラメータ名を取得することができれば、歓迎のメッセージが印刷されます。クッキー、クッキーにログイン情報を保存し、30Sの最大の年齢を設定するには、 
        文字列名= request.getParameter(「名前」);
         IF(=名前!ヌル && name.trimを()!
        クッキー(「名称」、名); 
            cookie.setMaxAge( 30 ); 
            response.addCookie(クッキー); 
        } {
             // 存在する場合、ユーザ情報は、クッキーから読み出された印刷情報ウェルカム 
            クッキー[] =クッキーrequest.getCookies ();
             IF(=クッキー!ヌル && cookies.length> 0 ){
                 のために(クッキークッキー:クッキー){ 
                    文字列COOKIENAME = Cookie.getName();
                     IF( "名前" .equals(COOKIENAME)){ 
                        文字列ヴァル = クッキー以降.getvalue()。
                        名前 = ヴァル; 
                    } 
                } 
            }             
        } 
        
        IF(名=!ヌル && name.trim()等号( "!" )){ 
            Out.print( "こんにちは:" + 名); 
        } {
             // どちらの要求があればlogin.jspをリダイレクトするためのパラメータ、なしクッキー、 
            Response.sendRedirect( "login.jspをを" ); 
        }
        
        

    %> 

</ BODY> 
</ HTML>

 

クッキーを使用して1.3が最近チェックした商品を表示しました

<ページ言語= "javaの" contentTypeの= "text / htmlの;のcharset = UTF-8" @%
    pageEncodingは = "UTF-8" インポート =% "java.utilの*。"> 
<!DOCTYPE HTML PUBLIC「 - // W3C! // DTD HTML 4.01移行// EN " "http://www.w3.org/TR/html4/loose.dtd"> 
<HTML> 
<HEAD> 
<META HTTP-当量= "Content-Typeの"コンテンツ=" text / htmlの;のcharset = UTF-8 "> 
ここ<タイトル>を挿入タイトル</ TITLE> 
</ HEAD> 
<BODY> 
    
    <H4>ブックページ</ H4> 
    
    <A HREF =" book.jspブック= JavaWeb」? > Javaのウェブ</a>の<BR> <BR> 
    <a href="book.jsp?book=Java">のJava </a>の<BR> <BR>
    <a href="book.jsp?book=Oracle">オラクル</a>の<BR> <BR> 
    <a href="book.jsp?book=Ajax">アヤックス</a>の<BR> <BR> 
    <a href="book.jsp?book=JavaScript"> JavaScriptの</a>の<BR> <BR> 
    <a href="book.jsp?book=Android">アンドロイド</a>を<BR> <BR> 
    <a href="book.jsp?book=Jbpm"> JBPM </a>の<BR> <BR> 
    <a href="book.jsp?book=Struts"> Strutsの</a>の<BR> <BR> 
    <a href="book.jsp?book=Hibernate">休止</a>の<BR> <BR> 
    <a href="book.jsp?book=Spring">春</a>の<BR> <BR> 
    
    <br>ログイン
    
    <%// 显示最近浏览的5本书
         // 获取所有的クッキー 
        クッキー[]クッキー= request.getCookies()。//は、クッキーのブックからスクリーニング:COOKIENAMEはATGUIGU_BOOK_を始めている場合は資格があること
         // 表示にcookievalue IF!(クッキー= ヌル && cookies.length> 0を
        
    
        
        ){
             のために{:(クッキークッキーC) 
                文字列COOKIENAME = c.getName()。
                もし(cookieName.startsWith( "AIDATA_BOOK_" )){ 
                    out.printlnを(c.getValue())。
                    out.print( "<BR>" ); 
                } 
            } 
        }

    %> 
    
    
    
</ body> 
</ HTML>

最新の5冊を表示
すべてのクッキーを取得
クッキーの本を選別:COOKIENAMEは資格があることAIDATA_BOOK_を開始している場合
にcookievalueを表示します

 


    <%の 
        文字列のブック = request.getParameter( "本" ); //
    
    
    
    
    
    
        ブラウザにブッククッキーウェイバック内の情報、Cookieの削除
         // 1.クッキーを削除することが決定:
         // 前提:AIDATA_BOOK_の始まりクッキーの数よりまたは5に等しい、 
        クッキー[] =クッキーrequest.getCookies( ); 
        
        // すべてのAIDATA_BOOK_保存クッキーの始まり 
        一覧<クッキー> bookCookies = 新しい新しいのArrayList <クッキー> ();
         // クッキーが入ってくる本のマッチングを保存し、books.jspするために使用した 
        クッキーtempCookie = ヌル; 
        
        IF(クッキー!= NULL && cookies.length> 0 ){
             (Cクッキー:クッキー){ 
                文字列COOKIENAME = c.getName();
                 IF(cookieName.startsWith( "AIDATA_BOOK_" )){ 
                    bookCookies.add(C); 
                    
                    IF (c.getValue()に等しい(書籍)){ 
                        tempCookie = C; 
                    } 
                } 
            } 
        } 
        
        // ①とIF books.jsp。着信ページの本は、クッキーのAIDATA_BOOK_が先に削除されないというクッキー
         // (第Cbookie ATGUIGU_BOOK_アレイ)、
        IF(bookCookies.size()> = 5 && tempCookie == NULL ){ 
            tempCookie = bookCookies。 GET(0 ); 
        } 
        
        // 。②その中の場合は、クッキーを削除
        IF!(tempCookie = nullを){ 
            TempCookie.setMaxAge( 0 ); 
            response.addCookie(tempCookie); 
        } 
    
        // 戻りクッキーとしてブックから渡された2 books.jsp 
        
        クッキークッキー = 新しい新しいクッキー( "AIDATA_BOOK_" + 書籍、書籍); 
        応答.addCookie(クッキー);
        
    %> 
    
</ BODY> 
</ HTML>

ブラウザにブッククッキーウェイバックの情報、クッキーを削除するには
クッキーを削除することが決定されます。クッキーは、よりAIDATA_BOOK_番号大きいの先頭または5に等しい、とクッキーのbooks.jspページ帳から渡された場合ではありませんATGUIGU_BOOK_どこ場合はクッキー(最初Cbookie AIDATA_BOOK_配列)は、その後、クッキーを削除することを古い削除
クッキーとしてbooks.jspリターンから渡された予約します

 

 アクションの1.4設定されたCookieパス

機能:
ヘルプウェブサイトが最後の時間を達成するためにアクセスするクライアントコンピュータを促し、サイト
の原則を達成するために:
毎回のようにあなたはサイトにアクセスするたびにセッション・プロセスとして各訪問、セッションの開始時刻を、クッキーの形で、この時間クライアントコンピュータに保存され、クッキーの復帰により、クライアントの時間値は、最後に次の訪問中にサイトを訪問しました。
Cookie情報が残るが、クライアントのブラウザ後に存在するか、またはコンピュータをシャットダウンするには、クッキーの保存時間は1年間に設定されています。

 

二、セッション

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/aidata/p/12000005.html