I.はじめに
これについて話をブログWeb
に広く使用されているアプリケーションCookie
、Session
同様Token
のメカニズムが、彼らは、Web
アプリケーションで重要な役割が、また、インタビューの中で、高周波テストサイトを果たしています。このブログは私が主に概念と実装されているこれらの三つの原則、およびそれらの間の違いを紹介します。
第二に、テキスト
2.1それらが必要とされる理由
まず最初の質問の、なぜ私たちは、これらの3つのものが必要なのでしょうか?あまりにも少し理解がHTTP
あることに注意する必要がありHTTP
、プロトコルはステートレスなプロトコルです。ステートレスとは何ですか?つまり、HTTP
各要求のためのサーバも同様に、発行されているような各要求の状態を記録していない、すべての要求はそれに外国人です。あなたは、同じサーバーへの2つの連続した要求を送信した場合でも、それは、これは2つの完全に無関係な要求です。しかし、我々はこのような現象は、我々はウェブサイトにログインしたときに、サーバーが私たちを知っているように見えた、私たちは要求を送ったでしょう、私たちは私たち自身に関連した応答を得ることができます。例えば、我々は、淘宝網、ログインした後、私たち自身の追加商品を見ることができるようになり、ショッピングカートをクリックして、私たちはサインインしていない場合、それは、ログインページへのジャンプをオフにブロックされます。これはなぜでしょうか?ないと言ってHTTP
、それはステートレスです。実際には、これは上記の3つのメカニズムに依存しています。
2.2クッキー
Cookie
実際には、テキストデータの一部は、コンピュータのブラウザに保存されたkey-value
いくつかの私たち自身の情報だけでなく、サーバを含むフォーム、。我々はサーバーにリクエストを送信すると、サーバーは、私たちは、ローカルにいくつかのデータを保存したい場合があり、一緒にこの時間は、応答パケットの名前があるのヘッダになりますSet-Cookie
(またはSet-Cookie2
、バージョンによって異なります)ヘッダ行、希望を閲覧続きますこれは、ローカルデータに格納されています。ブラウザは、応答パケットを受信し、前記見つかったset-Cookie
フィールドは、データがその中に含まれるコンピュータに格納されているだけでなく、サーバのアドレスを記録します。それはどのような使用これらのデータであること?我々は次のサーバにリクエストを送信すると、そのようなCookie
データは、一緒にサーバに要求メッセージで、サーバは、受信しますCookie
クライアントで現在の送信要求を識別できるようにするために、データを、または同定することができますクライアントは、順番に操作に対応した応答を行います。このプロセスを以下に示します。
以来Cookie
、ローカルファイルに保存されているので、それだけで長い有効期限を設定する必要が長期間保存することができます。また、その原因に留意すべきでありCookie
、それは、このように無効にし、クライアントのブラウザをできるように、実際に非セキュアデータストレージであるので、ローカルにCookie
。また、Cookie
データのサイズを保存する機能も制限され、単一のクッキーが格納されたデータを超えることができません4K
。
2.3セッション
Session
中国語の翻訳が呼び出されます。セッション、それは会話のクライアントとサーバであることを示しています。そして、Cookie
同じではありません、Session
サーバーによって維持されています。クライアントがサーバに要求を送信すると、サーバーはクライアントに、オブジェクトの要求を開始するために作成され、一連のサーバーに格納され、独特の生成中にSessionId
オブジェクトを識別するために、しかし、現在のユーザー情報を保存することができますについてこのオブジェクトインチ サーバがユーザに応答メッセージを送信するときに、するSessionId
応答パケットに入れSet-Cookie
ヘッダ、ユーザは、検出されたときに、応答パケットを受信しSet-Cookie
、その中に含まれるヘッダ行が、SessionId
ローカルに格納されています。次回は、クライアントは、サーバに要求を送信SessionId
からCookie
読み出し、およびサーバーに送信します。サーバーは、検出されたSessionId
貯蔵した後Session
、このコレクションオブジェクトを見つけるために、SessionId
ユーザーに関する情報を取得するために、オブジェクトに対応します。ときにユーザーがログオン、サーバー:最も一般的な用途は、ユーザーがログインすることでSession
アイデンティティストアのユーザー情報、などuserId
。ユーザーの要求を受信した後、クエリSession
オブジェクトが、含む場合にはuserId
、ユーザがログインしている、とすることにより取得することができることを示しているuserId
プライベートデータのクエリユーザー。サーバーは維持する必要はありませんSession
、それは、ブラウザのユーザーを終了します、またはユーザーの要求を受信した後、いくつかの時間のためになりません、Session
クリアします。
しかし、Session
一つ以上を維持するために、このような各ユーザーのとしていくつかの問題、サーバーの必要がありSession
、時間をかけてサーバーにアクセスするユーザーの数が多い場合には、多数の維持するために、サーバのニーズが発生しますSession
オブジェクト、深刻なフットプリントを。また、今日のWeb
サーバ、テクノロジー・クラスターを採用している、各サーバーがクラスタSession
達成するために、独立してSession
共有がより困難な作業です。最後に、ブラウザはさらにポイント無効にすることができCookie
、この時SessionId
に保存されることはありませんCookie
。この時間は、ブラウザーが一般的である、URL
に入れてSessionId
ユーザーがページをシャットダウンしないようにする前に、これは、SessionId
失われることはありません。
2.4トークン
Token
主な役割は、ユーザーの行うことです認証をトークン:我々は、一般的にそれを呼び出します。我々は、Webサイトにログオンすると、サーバーに送信されたアカウントのパスワードを入力します。認証が成功した場合は、この時点で、サーバーが、アカウントのパスワードを確認するためにデータベースを照会するために、サーバは、いくつかの特別な暗号化アルゴリズムに基づいて計算しToken
、(文字列)をクライアントに送信し、ユーザーのID情報もなど、過去に送られ、userId
。応答を受信した後、これをするToken
に格納されたCookie
要求を再度、またはローカルメモリToken
、及びuserId
サーバに送信されます。サーバーが要求を受信すると、クライアントの関連情報、再計算によるとToken
、新たな場合は、Token
値を使用してクライアントに送信されToken
、ユーザーが検証される前に、同じ示し、サーバーに直接データを取得することができます。
そして、私は感じていないのですSession
多少似ているが、実際には違いは非常に大きいです。サーバコンピューティングToken
の値は、ユーザーの個人情報(例えばクライアントとして使用する必要mac地址
もあることを保証し)、そして唯一の既知のキーサーバ自体、Token
クライアントごとに一意である、との唯一のサーバ自身のキー理由ハッカーがサーバーの計算をシミュレートすることはできませんので、あなたは、知っているToken
偽の要求を送信し、その後、値を。限り、サーバーがエラーを検出するとToken
、それはクライアントの要求を許可しますが、認証にクライアントを必要としません。また、リクエストごとに、サーバーが同じように必要のないSession
同じ、クライアントの身元保存、それは時間を計算する必要があるToken
であること、比較することができる、それが壊れないHTTP
ステートレスを。
しかし、これはまたことを意味しToken
、彼らは他人に傍受されると、他の側はあなたのアイデンティティを使用することができ、サーバーへの要求を行います。だから、Token
それは一般的に基づいているHTTPS
の使用ではなく、危険な上HTTP
使用します。また、ローカル暗号化処理に保存されているがそれに応じて行われます。
3 2.5の違い
(1)セッションとクッキーの違い
- セキュリティ:
Session
より多くのCookie
セキュリティは、Session
あなただけの独自のサーバーを表示することができ、サーバ側に保存されているSession
データストレージを、それがCookie
違法に読みやすく、クライアントのメモリです。 - アクセスの異なる種類の値:
Cookie
テキストファイルに格納されたデータ、それはデータのみ格納されている文字列を可能にするので、それを文字列に変換するために必要な他のタイプのデータを設定したい、Session
それがサーバーに格納されているため、あらゆる種類のデータに保存することができますメモリ、基本的にオブジェクト。 - 別の妥当性は:
Cookie
私たちは、多くの場合、デフォルトのログイン機能、使いなど、長い期間を設定することができSession
、クライアントが閉じる(デフォルト)または一般的な故障短い時間をSession
タイムアウトが失敗します。 - 異なるストレージサイズ:シングル
Cookie
保存されたデータを超えることはできません4K
、Session
それが格納されたデータよりもはるかに高いことができCookie
ますが、サーバは時にSession
大きすぎると、それは、サーバが実行速度が遅くさせる、あまりにも多くのサーバリソースを占有します。
(1)セッションとトークンとの間の差
Session
そして、Token
実際には本質的に異なる、彼らは同じことでは使用されませんされています。Session
主な役割は、それが収集、保存管理して、現在の要求しているクライアントについての情報を知るために、サーバーのニーズである店舗セッション情報クライアントとサーバーにあるSession
クライアントの情報を含むオブジェクトを。しかし、Session
サーバは現在の顧客を持っているとして、このメカニズムはまた、長いとして、検証のために使用することができSession
、および関連する情報、現在の顧客が検証されたことをサーバーが含まれています。
しかしToken
、それはクライアントの状態を維持するために、サーバーを必要としない、その役割は、クライアントは、検証を行うには、いくつかのネットワーク攻撃を防ぐためにリクエストを送信するだけです。唯一のクライアント要求を認証し、応答が得られますサーバーは、そうでない場合は、それを確認する必要があります。また、Token
よりセキュリティで認証Session
。2私たちは、サーバーを使用することができ、競合していないToken
使用後、検証のためにクライアントに、およびSession
セッション情報を保存します。
第三に、要約
顔にCookie
、Session
そしてToken
コンテンツが完全に真上、一般的な紹介をした、私が読んだ後、これら3人は一般的な理解を持つことができると信じて、彼らは本当に深く原則と実装の仕組みを勉強したいです十分ではない、我々はまた、より詳細な情報を学ぶ必要があります。