[解決済み] クッキーとセッションとは何ですか?
質問
私は、クッキーとセッションについて専門的に理解しようとしています。 ブラウザがサーバーに接続すると、サーバーはブラウザに "phpsessid" を持つクッキーをクライアント ブラウザのクッキー フォルダに "paste" するよう要求する、ということは知っています。
これで "phpsessid" が得られたので、クライアントがサーバーに入ると、ブラウザはサーバーに "phpsessid" を送信し、サーバーは tmp フォルダを見て、一致すれば、ユーザーがこのクライアントに対して持つすべてのデータをロードバックしますが、このプロセスにはちょっと戸惑います。
セッションと Cookie を作成するこれらのプロセス、つまり舞台裏で何が起こっているのかを理解する手助けをしてくれる人がいればありがたいのですが。
どのように解決するのですか?
これを見てみましょう。
クッキー そして セッション はどちらもブラウザが行う異なるリクエストの間でアプリケーションの状態を保持するための方法です。のページを要求するたびにログインする必要がないのは、この方法のおかげです。 StackOverflow .
クッキー
クッキーは、キーと値のペアでデータを保持する小さなデータビットです(最大4KB)。
name=value; name2=value2
これらの設定は JavaScript を使用するか、またはサーバー経由で HTTP ヘッダ .
Cookieには有効期限が設定されています。HTTPヘッダを使用した例です。
Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT
という名前のクッキーをブラウザに設定することになります。
name2
という値で
value2
という値で、約9年後に失効します。
クッキーは 非常に安全性が低い というのは、ユーザーが簡単にその内容を操作できるからです。そのため 常にクッキーのデータを検証する . クッキーから得られるものが、必ずしも期待するものであるとは思わないでください。
クッキーは通常、ログイン状態を保持するために使用されます。ユーザー名と特別なハッシュがブラウザから送信され、サーバーはアクセスを承認するためにデータベースと照合します。
クッキーはまた、しばしば セッション の作成にもよく使われます。
セッション
セッションは少し違います。各ユーザーは セッション ID を取得し、それをサーバに送って検証してもらいます。 クッキー によって、あるいは GET変数 .
セッションは通常短命であるため、アプリケーション間の一時的な状態を保存するのに理想的です。また、ユーザーがブラウザを閉じると、セッションは失効します。
セッションはクッキーよりも安全だと考えられていますが、それは変数自体が サーバー . 以下はその仕組みです。
- サーバーがセッションを開く (HTTPヘッダーでクッキーを設定)
- サーバーがセッション変数を設定する
- クライアントがページを変更
- クライアントは、ステップ1からのセッションIDとともに、すべてのクッキーを送信します。
- サーバーは、CookieからセッションIDを読み取ります。
- サーバーは、データベース(またはメモリなど)のリストからセッションIDを照合します。
-
サーバは一致するものを見つけ、変数を読み込みます。
$_SESSION
superglobal で利用可能になった変数を読み取ります。
PHPが一致するものを見つけない場合、新しいセッションを開始し、1~7の手順を繰り返します。
セッションはサーバーに保存されるので、機密情報を保存することができますが、ユーザーが、たとえば安全でないWiFiでログインした場合、セッションIDはまだ盗まれる可能性があることに注意してください。(攻撃者はクッキーを盗み見ることができ、それを自分のものとして設定することができます。)
これが要点です。どちらのテーマも、PHPのマニュアルで詳しく説明されています。
関連
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Long-Polling、Websocket、Server-Sent Events (SSE)、Cometとは何ですか?
-
[解決済み] localStorage、sessionStorage、session、cookieの違いは何ですか?
-
[解決済み] JSONウェブトークンの無効化
-
[解決済み] セッションとは何ですか?どのように機能するのですか?
-
[解決済み] なぜCSRF防止トークンをクッキーに入れるのが一般的なのですか?
-
[解決済み】セッションは本当にRESTfulnessに違反するのか?
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] JavaScript で範囲を作成する - 奇妙な構文
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?