クッキーとセッションの違いは?


154

私はWeb開発のトレーニングを行っており、JSPサーブレットについて学習しています。私はある程度の知識を持っていますHttpSession-私はいくつかのサンプルプロジェクトでそれを使用しました。

ブラウザでは、「Cookieを削除する」オプションを見てきました。クッキーを削除すると、それHttpSessionも削除されます。

クッキーとセッションは同じですか?それらの違いは何ですか?


次の質問も参照してください:< stackoverflow.com/questions/356562/… >具体的には、署名付きCookieに関する注釈。
Joel Coehoorn、2008

この質問の2番目の答えの方が適していると思います。これをベストアンサーとして選択すると、多くの人がそれを読んでくれます。
Suraj Jain 2017

回答:


180

セッションはユーザー情報を含むサーバー側のファイルですが、Cookieはユーザー情報を含むクライアント側のファイルです。セッションには、セッションを特定のユーザーにマップする一意の識別子があります。この識別子は、URLで渡すか、セッションCookieに保存できます。

最近のほとんどのサイトは2番目のアプローチを使用しており、URLに渡す代わりにCookieに識別子を保存します(これはセキュリティリスクを引き起こします)。おそらくこの方法を知らずに使用しているため、Cookieを削除することで、Cookieに含まれている一意のセッション識別子を削除するときに、一致するセッションを効果的に消去できます。


10
URLで渡すと(セキュリティリスクが発生します。)」実際には、どちらのアプローチにもセキュリティリスクがあります(異なるもの)。URLのシークレットIDは、適切に実行され、ユーザーがURLがシークレットであり、パブリックフォーラムに投稿できないことを理解している場合は、安全にすることができます。
curiousguy

1
「識別子はURLで渡すか、セッションCookieに保存できます。」。どこ?クライアント側かサーバー側か?より明確にしていただきありがとうございます。
Adib Aroui 2014年

4
@whitelettersandblankspacesセッションCookieはクライアントに保存されます(その値には、ブラウザーセッションをサーバー上のユーザーセッションにマップするためのすべてのリクエストで送信される一意のセッション識別子が含まれます)。
WynandB 2014

306

Cookieは、クライアントとサーバー間で送受信される短いテキスト文字列です。name=bob; password=asdfasCookieに保存して、サーバー側のクライアントを識別するために送受信することができます。これは、短期記憶のない銀行窓口とのやり取りであり、取引ごとに自分自身を特定する必要があると考えることができます。もちろん、この種の情報を保存するためにクッキーを使用するのは恐ろしいほど安全ではありません。Cookieのサイズにも制限があります。

これで、銀行の出納係が自分の記憶の問題について知ったとき、彼/彼女は紙にあなたの情報を書き留めて、短いID番号を割り当てることができます。次に、トランザクションごとにアカウント番号と運転免許証を提供する代わりに、「私はクライアント12です」と言うだけです。

それをWebサーバーに変換する:サーバーは関連情報をセッションオブジェクトに格納し、Cookieでクライアントに送り返すセッションIDを作成します。クライアントがCookieを送り返すと、サーバーはIDを使用してセッションオブジェクトを検索するだけです。したがって、Cookieを削除すると、セッションは失われます。

もう1つの方法は、サーバーがURL書き換えを使用してセッションIDを交換することです。

リンクがあるとしましょう- www.myserver.com/myApp.jsp ページを移動して、すべてのURLを書き換えwww.myserver.com/myApp.jsp?sessionID=asdfたりwww.myserver.com/asdf/myApp.jsp、そのように識別子を交換したりできます。この手法はWebアプリケーションコンテナーによって処理され、通常、Cookieなしのセッションを使用するように構成を設定することで有効になります。


29
これは、実世界のすばらしいアナロジーに基づいたすばらしい説明です。この答えはもっと賛成すべきです。そのような質問をする可能性が最も高い初心者には非常にアクセスしやすいです。
user798719 2013

2
ユーザーであり、他の誰かが私のセッションIDを知った場合はどうなりますか?
マリアイネスパルニサリ2015年

3
@ I19おそらく、彼らはあなたになりすますことができます。これは、オンラインギャンブルのシナリオで発生しました。ホテルのWi-Fiを盗聴し、セッションIDを盗み、アカウントにアクセスします。セッションの保護は、まったく別の話です。
Chris Cudmore、2015年

2
では、最初にCookieを作成するのは誰ですか?サーバーまたはクライアント?それともこのアプリケーションに依存していますか?(そうでなければセキュリティの脅威をもたらすのでサーバーと言いますが、言及する価値があると思いますか?)
nha

4
@nhaサーバーはセッションを作成し、Cookieと共に応答に渡します。セッションは、作成するアプリケーションロジックに応じて作成されます。クライアントはCookieを作成することもできますが、サーバーがセッションで値が何を表しているのかをサーバーが知らない可能性があるため、セッションを識別するシナリオではあまり役に立ちません。
Azeem、2015

4

Cookieとセッションはどちらもユーザーに関する情報を格納しますが(HTTPリクエストをステートフルにするため)、Cookieはクライアント側(ブラウザ)に情報を格納し、セッションはサーバー側に情報を格納します。Cookieは、制限されたユーザーに関する情報を保存し、ユーザーごとに制限されたコンテンツのみを保存するという意味で制限されています。セッションはそのように制限されていません。



1

Cookieは基本的に、Webブラウザーを介してアクセスされるグローバル配列です。多くの場合、値の送受信に使用されます。フォーム間の値にアクセスするためのストレージメカニズムとして機能します。Cookieは、セッションと比較してそれらの使用に制約を追加するブラウザーによって無効にすることができます。

セッションは、ログインとログアウトの間の何かとして定義できます。ユーザーがログインしてからログアウトするまでの時間はセッションです。セッションは、セッション時間、つまりログアウト前の値のみを保存します。セッションは、ユーザーがログオンすると、ユーザーのアクティビティを追跡するために使用されます。


0

Google JSESSIONID。これは、サーブレットAPIが最初にURLの書き換えをどのように使用するかを説明し、次にCookieが有効になっている場合は、Cookieを使用してセッションを管理します。

HTTPはステートレスであるため、クライアントブラウザーは各リクエストでそのセッションのIDをサーバーに送信する必要があります。サーバーは、なんらかの方法で、このIDを使用して、そのセッションのデータを取得し、リクエストの存続期間中使用できるようにします。


0

Asp.netのセッション:

1.アプリケーション全体のデータを維持します。

2.現在のセッションが生きている場合、データを永続化します。複数のコントローラーからアクセスできるいくつかのデータが必要な場合は、セッションはデータを保存および取得する方法です。

3.セッションは、ユーザー情報を含むサーバー側のファイルです。[セッションは、特定のユーザーにセッションをマッピングする一意の識別子です]

それをWebサーバーに変換する:サーバーは関連情報をセッションオブジェクトに格納し、Cookieでクライアントに送り返すセッションIDを作成します。クライアントがCookieを送り返すと、サーバーはIDを使用してセッションオブジェクトを検索するだけです。したがって、Cookieを削除すると、セッションは失われます。


0

Cookieは、クライアントとサーバー間のセッションを実装する方法です。このようにして、Cookieにセッション情報が保存されます。しかし、これはセッション情報を保持する唯一の方法ではありません。別の方法は、セッション情報をURLに保存することです。


0

Cookieはテキストファイル形式でブラウザに保存されます。保存されるデータの量は制限されます。4kb[4096bytes]のみが許可されています。$ _ COOKIE変数は同じ名前の複数のCookieを保持しません

でcookie値に簡単にアクセスできます。そのため、安全性低くなります。setcookie ()関数は、

<html> 

鬼ごっこ。

セッションはサーバー側に保存されます。無制限の量のデータが保存されます。セッションで複数の変数を保持します。でCookieの値に簡単にアクセスできないため、より安全です。

リンク: cookieとセッションの違い


まあ、実際にはCookieに複数のデータを保持できます。また、セッションは実際には無制限の量のデータを保持できません。あなたが持っているRAMの量によってかなり制限されます。
Koray Tugay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.