web-dev-qa-db-ja.com

セッションとCookieの違いは何ですか?

セッションとCookieの違いは何ですか?

それぞれどのような状況を使用する必要がありますか?

35
EvilBoy

セッション

セッション は、ユーザーごとにサーバーのメモリ(または代替 ​​セッション状態 )に保存されます。セッションはcookie(session key)を使用してユーザーをセッションに結び付けます。つまり、ユーザーのマシンのCookieには「機密」データは保存されません。

セッション は通常、Webサイトをナビゲートするときに状態を維持するために使用されます。ただし、一般的にアクセスされるオブジェクトを保持するためにも使用できます。 Session-stateがInProcに設定されている場合のみ、別の Session-Stateモード に設定されている場合のみ、オブジェクトもシリアル化可能である必要があります。

Session["userName"] = "EvilBoy";

if(Session["userName"] != null)
  lblUserName.Text = Session["userName"].ToString();

Cookies

Cookies はユーザーマシンにユーザーごとに保存されます。 Cookieは通常、ほんの少しの情報です。 Cookieは通常、単純なユーザー設定の色設定などに使用されます。 Cookieに機密情報を保存しないでください。

Cookieがユーザーまたは外部ソースによって改ざんされていないことを完全に信頼することはできませんが、セキュリティが大きな懸念事項であり、Cookieを使用する必要がある場合は、Cookieを暗号化するか、SSL経由でのみ送信されるように設定できます。ユーザーはいつでも自分のCookieをクリアしたり、Cookieを完全に許可したりできないため、ユーザーが過去にサイトにアクセスしたという理由だけでCookieが存在することを期待できません。

//add a username Cookie
Response.Cookies["userName"].Value = "EvilBoy";
Response.Cookies["userName"].Expires = DateTime.Now.AddDays(10);
//Can Limit a cookie to a certain Domain
Response.Cookies["domain"].Domain = "Stackoverflow.com";

//request a username cookie
if(Request.Cookies["userName"] != null)
   lblUserName.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);

サイドノート

ASP.NETは cookieless state-managementもサポートしていることに言及する価値があります。

59
cgreeno

Cookieは、変数のクライアント側ストレージです。ブラウザによって物理的にクライアントマシンに保存されました。範囲はマシン全体です。同じマシンの異なるユーザーが同じCookieを読み取ることができます。

このため :

  1. Cookieに機密データを保存しないでください。
  2. 1つのユーザーアカウントに属するデータを保存しないでください。
  3. Cookieはサーバーリソースには影響しません。
  4. Cookieは、ユーザーが指定した日に失効します。

セッションは、変数のサーバー側ストレージです。デフォルトでは、サーバーのメモリに保存されます。ただし、SqlServerに格納するように構成できます。範囲はブラウザ全体です。同じユーザーが2つ以上のブラウザーを実行でき、各ブラウザーには独自のセッションがあります。

このため :

  1. セッション中に機密データを保存できます。
  2. セッション中にすべてを保存しないでください。サーバーリソースの無駄です。
  3. ユーザーがブラウザを閉じると、セッションタイムアウトによりすべての情報がクリアされます。 (デフォルトは20分です)
15
Canavar

Cookieは、サーバー(ドメインを持っている)がサーバー/ドメインにアクセスしたユーザーのブラウザーに保存する識別文字列です。

特定のユーザーが特定の時間枠でサーバー/ドメインにアクセスしている間、セッションは多分変数、状態、設定の単位です。すべてのセッション情報は、サーバーに保存されている従来のモデルにあります(!)

多くの同時ユーザーが同時にサーバー/ドメインにアクセスできるため、サーバーは多くの異なる同時セッションを区別し、常に適切なセッションを適切なユーザーに割り当てる必要があります。 (そして、他のユーザーのセッションを「盗む」ことはできません)

これはCookieを介して行われます。ブラウザに保存され、この場合はs73jsd74df4fdfのようなランダムな組み合わせ(推測できない)であるCookieは、ブラウザからサーバーへの各リクエストで送信され、サーバーは正しいセッションを割り当てて使用できますその回答(ページビュー)

Cookieにより、サーバーはブラウザ/ユーザーを認識できます。このセッションにより、サーバーは異なるページビュー間で情報を記憶できます。

11
Karl Thorwald

両方の可能性があります。データベースの主キーがハッシュされ、ルックアップテーブルに格納されます。その後、ハッシュはCookieとしてクライアントに格納されます。ハッシュCookie(hahhahaha :)が送信されると、対応する主キーが検索され、残りの詳細はサーバーデータベース上の別のテーブルでそれに関連付けられます。

2
Joe

セッションは、ページ呼び出し間でデータを転送またはアクセスするサーバー側のオブジェクトです。
Cookiesは、ブラウザとサーバーのテキスト情報を保存するクライアント側/クライアントマシンであるオブジェクトです。

1
raghav

セッションは、Cookieを許可するユーザーに依存しません。代わりに、ユーザーがブラウザを開いている間、アクセスを許可して情報を渡すトークンのように機能します。セッションの問題は、ブラウザを閉じるとセッションも失われることです。そのため、ログインが必要なサイトがある場合、これをCookieのようにセッションとして保存することはできず、ユーザーはアクセスするたびに再ログインを強制されます。

1
Shankar kumar
  • Cookieとセッションの主な違いは、Cookieはユーザーのブラウザーに保存され、セッションは保存されないことです。この違いにより、それぞれの用途が最適になります。

  • Cookieは、削除されるまでユーザーのブラウザーに情報を保持できます。ユーザーがログインとパスワードを持っている場合、これはブラウザーでCookieとして設定できるため、訪問するたびにWebサイトに再ログインする必要がありません。ブラウザのCookieにはほとんど何でも保存できます。

0
Shankar kumar

セッションCookieとは何かに関して混乱があるようです。

まず、セッションCookieを話しているとき-ASP.Netセッションとは関係ありません。同様に、セッションCookieはサーバー側のプロセスやキャッシュとは関係ありません。

セッションCookieは、ブラウザセッションの有効期限が切れると有効期限が切れるCookieにすぎません。セッションCookieを作成するには-有効期限を入れないでください。これを行うと、Cookieがメモリに保存され、ブラウザが破棄されるときに破棄されます。

0
Sean Mc