Cookieとセッションはどちらもユーザーアクセスステータスを維持することを目的としています。一方では、ビジネスの実装を促進することであり、一方では、サーバーのプログラミングを簡素化し、アクセスパフォーマンスを改善することです。 Cookieは、クライアントのテクノロジー(つまり、ブラウザ)です。 Cookieを設定した後、サーバーにアクセスするたびに、Cookieがリクエストを受け取ります。セッションはサーバーのテクノロジーであり、サーバーにユーザーアクセス情報を保存します。
Cookieを使用して情報を配信します。 Cookieの数が増加し、訪問数が増加すると、消費する帯域幅はますます大きくなります。セッションを使用して情報を保存する場合、最大の弱点は、複数のサーバー間で共有するのは簡単ではないことです。
1クッキー
Laymanの用語では、ユーザーがHTTPを使用してサーバーにアクセスすると、サーバーはクライアントブラウザにキー値ペア情報を返し、これらのデータにいくつかの制限を追加します。ユーザーが制限を満たすと、ユーザーがサーバーに次にアクセスするときに、以前にCookieキーValueペア情報を設定します。ユーザーがURLを入力すると、ブラウザはローカルハードドライブのURLに関連付けられたCookieを探します。 Cookieが存在する場合、ブラウザはページリクエストとともにCookieをサイトに送信します。
Cookieは、特定のページではなく、Webサイトに関連付けられています。したがって、サイトのどのページに関係なく、ブラウザとサーバーはCookie情報を交換します。ユーザーが異なるサイトにアクセスすると、各サイトはユーザーのブラウザにCookieを送信できます。ブラウザはすべてのCookieを個別に保存します。
Cookie属性アイテム
現在、2つのバージョンにはバージョン0とバージョン1があります。これらには、2種類の応答ヘッダー識別子、つまり「SetCookie」と「Set-Cookie2」があります。
Cookie 0属性値
Cookie 1属性値
JavaでCookieを使用する例
@OverridePublic void doget(httpservletrequest request、httpservletResponse応答)IoException {respons.setContentType( "Text/html; charset = utf-8"); printwriter out = response.getwriter(); cookies = cookies " == null){response.addcookie(new Cookie( "name"、 "luoxn28"));} else {system.out.println(name);} out.println( "hello world");} public static string getcoodie(cookie、cookie、cookie:cookie!= null){if(cookie! (cookie.getName()。equals(key)){return cookie.getValue();}}} null;}Cookieを使用するためのいくつかの注意事項(Javaの使用法を例にとる)
•作成されたCookieの名前と価値は、非Assic文字ではありません。中国人の場合、rrlencoderを介してエンコードできます。それ以外の場合は、java.lang.illegalargumentexceptionの例外がスローされます。
•複数の名前と値の値が表示されると、実際には同じ「Cookie」ヘッダーにあります。
•Cookieの値は、「;」以外の句読点を保存できます。しかし、漢字を保存することはできません。漢字を保存するときにガベージが表示されます。
Cookieのいくつかの制限
Cookieは、HTTPヘッダーのフィールドです。 HTTP自体にはこのフィールドに制限はありませんが、Cookieは最終的にブラウザに保存されます。次の表に示すように、さまざまなブラウザには、Cookieの保存にいくつかの制限があります。
より多くのクッキーを保管しようとすると、最古のクッキーが破棄されます。
2セッション
セッションは、Cookieの数が増加すると、クライアントとサーバーの間のデータ送信量が増加するという問題を解決します。同じクライアントがサーバーと対話する場合、すべてのCookie値を毎回渡す必要はありませんが、ID値のみが渡されます。このIDは、クライアントが初めてサーバーにアクセスすると生成され、各クライアントは一意です。このIDは通常、名前がjSessionIdのCookieです。
セッションはCookieに基づいてどのように機能しますか? URL PATHパラメーターに基づくことができます。また、Cookieに基づくこともできます。コンテキストコンテナのCookieロゴが変更されていない場合、デフォルトでもサポートされています。ブラウザがCookie機能をサポートしていない場合、ブラウザはユーザーが要求したURLパラメーターにユーザーのSessionCookienameを書き換えます。その配信方法は、 /path /servlet; name = xxx; name2 = xxx2?name3 = xxx3などです。 sessioncookiename session-config構成アイテムがweb.xmlで構成されている場合、cookie-configの下の名前属性はこのsessioncookienameの値です。 session-config構成アイテムが構成されていない場合、デフォルトのsessioncookienamejiushi "jsessionid"。セッションに関連付けられているCookieは、他のCookieと変わらないことに注意してください。クライアントがCookieもサポートしている場合、TomcatはまだCookieでセッションIDを解析し、URLでセッションIDを上書きします。
セッションの仕組み
セッションIDを使用すると、サーバーはhttpsessionオブジェクトを作成できます。初めてrequest.getSession()メソッドを呼び出すとき。対応するhttpsessionオブジェクトがない場合、新しいオブジェクトが作成され、org.apache.catalina.managerのセッションコンテナに追加されます。すべてのセッションライフサイクルを保存し、セッションの有効期限が切れ、リサイクルされ、サーバーが閉じられ、セッションはディスクにシリアルされます。クライアントは、作成したセッション値を保存するセッションオブジェクトに対応することに注意してください。
このクライアントに関連付けられたセッションの有効期限が切れたとしても、Request.getSession()メソッドによって呼び出された基準は常に存在します。有効期限が切れると、新しいものが作成されますが、以前に設定されたセッション値は失われます。
3 Cookieとセッションセキュリティの比較
Cookieは、保存されたデータをHTTPヘッダーを介してクライアントからサーバーに渡し、次にサーバーからクライアントに渡します。すべてのデータはクライアントブラウザに保存されます。これらのデータにアクセスすることができ、クッキーはプラグインを介して追加および変更することもできます。すべてのCookieのセキュリティは比較的貧弱です。それに比べて、セッションはサーバー側にデータを保存しますが、これははるかに安全です。 Cookie IDを渡すにはCookieのみが必要なため、セッションはユーザーのプライバシーと重要なデータを保存するのに適しています。
分散セッションフレームワーク
大規模なインターネットアプリケーションでは、Cookieを使用することで、Cookieを使用すると、アプリケーションの分散展開の問題がうまく解決できるため、Cookieとセッションのみを使用することは実現できません。大規模なインターネットアプリケーションシステムには数百のマシンがあり、多くの異なるアプリケーションシステムが連携して機能します。 Cookieはユーザーのブラウザにデータを保存するため、ユーザーが訪問するたびにデータがサーバーに戻され、同じユーザーのリクエストが異なるサーバーで処理されることによって引き起こされるCookieの矛盾の問題を解決します。
アプリケーションはクラスターであるため、各サーバーのメモリにセッションを保存することはできません。各サーバーに数十万人のアクセスユーザーがある場合、サーバーメモリに対応できません。たとえそれが収容されたとしても、セッションが他のサーバーに同期されることを保証することはできません。したがって、これらのセッションを共有するには、特別な分散キャッシュに保存する必要があります。これは、いつでも読み書きできます。 Memcache/RedisやTaobaoのオープンソース分散フレームワークTAIRなど、パフォーマンスは要件を満たすのに十分でなければなりません。
繰り返されるフォームの提出質問
ウェブサイトには、提出物を繰り返した場所がたくさんあります。フォームの繰り返しの提出を防ぐために、各アクセス要求がサーバーに固有のように、ユーザーの各アクセス要求を識別する必要があります。ユーザーの各リクエストを識別するために、ユーザーが要求したフォームフィールドに非表示のフォームアイテムを追加でき、その値は次のような一意のトークンです。
<form id = "form" method = "post"> ... <入力型= hidden name = "token" value = "xxx"/> </form>
ユーザーがフォームを要求し、ユーザーのセッションに設定すると、一意のトークンが生成されます。ユーザーが提出すると、トークンがセッションで保存されたトークンと一致しているかどうかを確認します。一貫している場合、それは繰り返される提出がないことを意味します。同時に、セッションのトークンは新しいトークン値に更新されます。それ以外の場合、ユーザーが送信したトークンは、現在のリクエストの法的トークンではなく、提出は失敗します。
上記は、編集者があなたに紹介したJavaのCookieとセッションのことです。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!