「Memember Me」機能のクッキーとセッション
-
18-09-2019 - |
質問
私はユーザーが長期間ログインし続けることを許可したくなかったので、私は "私を覚えてますか" 特徴。私はそれがどのように行われているかについて考え始めました、そして、いくつかの明確化を望みます。
現在、セッションをデータベースに保存しています。いつも私を困惑させてきたのは、Cookieを明示的に設定していなくても、ブラウザに配置されていることです。セッションはセッションであり、クッキーはクッキーであるため、私は少し混乱しています。セッションがどのようにクッキーを設定するかわかりません。
また、ユーザーをログインしたままにするためにセッションアレイに別のセッション変数を設定するだけで十分であるか、それでもクッキーを設定する必要があるかどうかを知りたいですか?
解決
いつも私を困惑させてきたのは、Cookieを明示的に設定していなくても、ブラウザに配置されていることです。
セッションハンドラーは、どのセッションがどのユーザーに属しているかを特定する必要があります。
セッションライブラリの大部分は、Cookieを設定することでこれを行います。
()セッション配列に別のセッション変数を設定して、ユーザーのログインを維持するだけで十分ですか、それともCookieを設定する必要がありますか?
ほとんどのセッションライブラリが設定されています セッションクッキー. 。これらは、指定された有効期限のないCookieです。ブラウザが閉じていると期限切れになり、「Remember Me」機能を実装するのに十分ではありません(ブラウザの再起動全体で持続すると予想されるため、明示的な有効期限が必要です)。
他のヒント
データベースからセッションデータを引き戻すには、キーが必要です。これはセッションIDと呼ばれます。
セッションIDはどこかに保存する必要があります。クライアントが投稿するURL文字列の一部として、またはより一般的には、クライアントのCookieで。リクエストが投稿されると、セッションはCookieから値を読み取り、セッションストレージから引き戻すレコードを知っています。
これは自動的に発生します。
セッションを使用する唯一の理由は、保持したいデータが4kBを超える場合です(ブラウザの制限)。または、サーバーからデータを取得するのに必要な時間がセッションストレージから読み取るよりも大きい場合。
保存しているデータの量が4kb未満の場合は、最初からCookieに設定することを強くお勧めします。通常、ユーザーID、ユーザー名、その他の属性などの属性などを保存します。 Cookie値を検査することは些細なことであるため、この情報はクライアントに行く前に暗号化する必要があることに注意してください。
もう1つのことは、元のソースから必要なデータをプルするクエリ時間が小さい場合、セッションに配置する代わりにそれを行うことを選択することです。そうすれば、すべてのページがロードされるのではなく、実際に必要な場合にのみ入手できます。
Cookieとセッションの関係を説明する:
PHPはCookieを使用して、各ユーザーのセッションを一意に識別します。サーバーからファイルをリクエストするたびにCookieが送信されるため、これは唯一の信頼性の高い方法です。セッション識別子でもあるCookieのトークンを使用して、PHPはTMPディレクトリを検索してセッションが存在するかどうかを確認します。セッションが存在する場合、変数は正しいファイルからロードされ、そのセッションの変数にアクセスできます。
したがって、Cookieは、どのユーザーがどのセッションを使用するかを識別するために必要なセッション識別子を保存します。これは、セッションのハイジャックがどのように起こるか、人々がセッションを識別するセッションを変更して、他の人のセッション識別子を使用することです。
基礎となるPHPセッションの実装により、Cookieが設定されます。これを変更して、クエリ文字列にセッションID値を渡すことができますが、お勧めしません。あなたはクッキーを使用しません、PHPはします。 Cookieに保存されているセッションID値を参照して、セッションデータのルックアップを実行します。
また、ユーザーのログインを維持するためにセッション配列に別のセッション変数を設定するだけで十分な場合、またはCookieを設定する必要がある場合、私は知りたいですか?
ユーザーがブラウザを閉じるとすぐに、セッションが殺され、Cookieが削除されます。セッション値を持続するためのメカニズムが終了するとは思わない。