1分は、JavaのWeb開発者が習得しなければならない理解するためにあなたを取る:トークン、クッキー、セッション

Webアプリケーションでは、HTTP要求はステートレスです。それは次のとおりです。最初の要求を開始したユーザは、サーバ接続が確立され、ログインが成功すると、あなたはそれをログに記録する必要性を避けるために、ページを開くたびに、クッキー、セッションが登場します。

クッキー

クッキーは、クライアント情報、利用者が、また、セッションを達成する方法を記録するために使用される情報の一部を保存するユーザーのためのメカニズムです。クッキーは、保存されたデータの量を制限し、クライアントのブラウザに保存されます。異なるブラウザは異なるストレージサイズを持っていますが、一般的には4キロバイト以上。そのため、クッキーの実際の使用は、短いテキストメッセージを保存することができます。

たとえば:今、ウェブサイトを訪問するユーザー名・パスワードを入力し、[直接開い多くの場合、次の日を開きます。この時間は、使用されるメカニズムは、クッキーです。

セッション

基本的なユーザー情報、権限情報、ユーザー:セッション状態は、データ構造である顧客レコードのための別のメカニズム、(主に保存されたサーバーとセッションセッションIDの内容に格納されている、だけでなく、などのカスタムコンテンツの多くが含まれています手段について、固定された変数、等)、このデータは、ユーザのステータスを追跡するために、クラスタ、データベース、ファイルに格納されてもよいです。

サーバーへのクライアントブラウザへのアクセス、何らかの形でサーバーに記録されたクライアント情報をサーバー。これはセッションです。時の状態から再度、クライアントブラウザへのアクセスだけでクライアントのセッションを探します。

ユーザーがログオンする最初の時間の後、ブラウザは、サーバがユーザのためのSessionIdを作成し、サーバにユーザ情報を送信し、のSessionIdに一緒に応答内容(クッキー)がブラウザに返さ、ブラウザは、このデータを格納しますローカル。ユーザーが要求を再送信すると、ブラウザが自動的にクッキーが自動的にサーバーに運ばれたデータを格納された最後の要求を配置します。

サーバは、要求情報を受信した後、現在のユーザーをセッションID、その後応じのSessionIdセッションセッション・データ・リポジトリに取得したユーザのブラウザに返されたブラウザによって要求されたデータを決定します。

例:商品の後にクライアントで追加ショッピングカートには、追加した項目を知っている、そしてそれは、セッションの使用に関するいくつかの情報を格納する必要ので、それを区別するためにどのようにサーバーことができます。

クッキーメカニズムは「合格」顧客をチェックすることで、顧客の同一性を決定する場合は、セッションメカニズムは、サーバー上で確認するために、「顧客リスト」を通じて顧客の身元を確認するために使用されます。顧客ファイルは、それだけでテーブルを照会する必要がある場合に顧客ファイル、顧客訪問のサーバー上に作成されたセッション同等のプログラム。

世代後のセッションでは、限り、ユーザーがアクセスを続けると、サーバーは、最終アクセス時間のセッションを更新すると、セッションを維持します。サーバーでメモリのオーバーフローを防ぐためには、もはやアクティブなセッションメモリから削除されません。これは、タイムアウトの時間のセッションです。あなたはタイムアウトを超過した場合、セッションは自動的に無効、サーバーを訪問していませんでした。

トークン

HTTP要求はステートレスを形成するように突き合わせています。そのHTTPサーバはこの要求を知らないと、最後の要求が関連しています。だから、セッションの導入、テキストの一部の保存、すなわち、サーバとクライアントがあるだろう、毎回クライアント要求がで開始するので、サーバーは、クライアントが要求を開始していたかどうかを知っています。

したがって、サーバへの頻繁なクライアント要求のデータが得られ、データベースのユーザ名とパスワードとユーザ名とパスワードを決定するために比較にサーバの頻繁なクエリが正しいかどうかです。セッションは、ストレージスペースの必要性は、データベース・サーバへの頻繁なクエリが多くの圧力を引き起こしています。

この場合、トークンは、アプリケーションを生まれ。

トークンは、要求元のクライアントにトークンとして、サーバが生成し、一連の文字列です。クライアントからサーバーへの最初の訪問、サーバはuserIdを超える固有の識別パスに基づいて行われます場合は、我々はいくつかのアルゴリズム、プラスキーを使用して、トークンを生成し、トークンがクライアントに返さ後、その後BASE64エンコーディングに目を通します、トークンエンドは、(ローカルデータベースまたはファイル形式で保存することができます)に保存されます。次の要求は、クライアントが唯一のトークンを持参する必要がある場合、サーバーはトークンを検証するために、同じアルゴリズムとキーを使用して、要求を受信します。

最も簡単なトークン組成:UID(ユーザの一意のID)、時刻(現在時刻のタイムスタンプ)、サイン(署名圧縮するために、いくつかの元塩+ハッシュアルゴリズムにより16進文字の特定の長さトークンに文字列は、悪意のある第三者が)サーバに要求トークンスプライシングを防止することができます。

サーバーに記録されているトークンベースの認証方法、ログオンを使用して、ユーザーを保存する必要はありません。おそらくプロセスはこれです:

  • クライアントは、パスワードを要求して、ユーザのログイン名を使用しています

  • サーバーは、ユーザー名とパスワードを確認するための要求を受け取ります

  • 認証が成功した後、トークンを発行するサーバーは、その後、トークンはクライアントに送信されます

  • クライアントトークンを受信した後、それは、クッキーまたはデータベース上のように、格納することができます

  • たびに、クライアントは、トークン発行サーバとサーバのニーズにリソースを要求します

  • データ・サーバは要求を受信し、認証が成功した場合、それはクライアントの要求に返されるクライアントは、トークンと内部要求していることを確認します

APPログがサーバに暗号化されたユーザ名とパスワードを送信すると、サーバは、成功した場合、そのようなトークンとしてランダムに生成された32ビットのビット列として、何らかの方法で、ユーザー名とパスワードを認証するためにサーバに格納され、リターントークンAPPに、APP後要求されたとき、私たちはトークンを持参しなければならない場所を確認するために必要とする人々、そしてその後、サーバー側の検証トークンは、成功し、エラーメッセージを返すために失敗したことを望ましい結果を返し、彼は再度ログインしてみましょう。

同じ携帯電話とAPPのために、現在唯一のトークンであり、携帯電話APPは、現在有効なトークンを格納します。前記サーバは、有効なトークン、要求APPトークンと妥当性が確認されるたびに提供します。

次の例では、よく理解することができます。

その後、 『』良い 『』(私は風邪で焼き、あなたの麺スタンド販売、スコープクレジット午前トークン)、「良い」、「卵「私は(私はあなたの麺スタンド冷たい焼き販売、スコープクレジット午前トークン)パンケーキを持っているだろう」とサーバーが再起動されるため、またはその他の理由により、サーバーがトークン保存されている場合......卵(私はスコープの信用、焼き冷麺スタンド販売のごトークンよ)、「最終的に普通​​のパンケーキを取得するための」良い」、プラス卵2個を追加が失われます。その後、ユーザーは、再度ログインして認証する必要があります。私はあなたを見ていないことを......「「私は(私はあなたが麺用の焼き麺を販売していたトークン)パンケーキを持っているでしょう」。」

おすすめ

転載: juejin.im/post/5df63bddf265da33a413ddb9