skillup

技術ブログ

プログラミング全般

ログインしたままにするの挙動に関して(ステートフル認証の基本的な仕組みの復習もかねて)

投稿日:2020年12月5日 更新日:

基礎の基礎ですが、ログイン処理に関しての動きに関して。

通常のログイン処理に関して

通常のログイン処理では、まず以下のような手続きを取ります。

  1. ログイン時にセッションにユーザーIDなどキーとなる情報を保存しておく。(保存する媒体自体はファイル、DB、キャッシュなど色々あります。)
  2. このセッションとして保存されているデータ自体を識別するキーをクッキーに保存。当たり前ですがブラウザのクッキーにこれが保存されており、フレームワークを使っておりますと、何らかのプレフィックスがついていることが多いです。
  3. 通常、一度ログインしますとページにアクセスするたびに、クッキーからセッションのキーを取得し、そのあとセッションにアクセスし、データを取り出すなどの処理を内部で行なっていることからログインが継続します。
  4. 永続的にデータが保存されるのは危険なため、最後の操作から一定期間でこのデータ自体が使用できなくなることが一般的です(30分〜2時間など)。ですので、ログインしたまま長い間放置していると「セッションが切れました。再度ログインしてください。」などのメッセージが出ます。

それ以外にも開発を行なっているときは当たり前ですが、保存されているセッションデータを直接削除すればログインできなくなります。

ログインしたままにする

これに対して、一般的なWebアプリなどではログインしたままにするというチェックボックスがあり、一度チェックをしてしまうと、ほぼログイン処理などはせずに自動的にログインできる機能が搭載されていることが一般的です。

この場合、上記のようなセッションにデータ保存、クッキーにセッションのキーを保存という処理以外にも、

クッキー自体にキーとなる情報(例えばユーザー名やIDなど)という情報を暗号化して保存しておき、セッションが切れ場合にはここから情報を復元して、DBなどに直接アクセスをする、という挙動をしているようです。

ですので、例え開発時にセッション情報を削除しても上記のような実装ですとログインが継続されています。(もちろんブラウザ自体のクッキーを削除してしまえば、ログインはできませんが・・・)

Laravel内のセッションの仕組みでわかりやすい記事があってのでリスペクトの意味も込めてリンクを。

ログインのRemember Me

 

-プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

短いコードを書く

私が普段コードを書くときに考えていることは常にいかに短くかけるか、ということといかにバグを生み出さないかということです。 基本的にはできるだけ、短くシンプルに書くようにしています。 そうすることであと …

no image

DIとDIコンテナについて再考

今までも何度かやったDI(Dependency Injection = 依存性の注入)について。 以前のリンク PHPにおけるDI スコープアノテーションとCDIについて Contents1 DIとは …

no image

Simple Factoryパターンについて

今回はデザインパターンの一種であるSimple Factoryパターンに関して。 Contents1 Simple Factoryパターンとは2 サンプルコード3 解説 Simple Factoryパ …

no image

新しいプロジェクトに入った時にやること

新しいプロジェクトに入った時に最初にすべきことややっておくことなど Contents1 仕様理解編1.1 ユーザーの行動遷移の理解1.2 キー系のデータの理解1.3 データグルーピング1.4 サンプル …

no image

オブジェクト指向設計 単一責任のクラスの設計

オブジェクト指向をするうえでの大事なポイントなど Contents1 単一責任のクラス設計1.1 メモ1.2 実際のコーディング上のコツ1.3 感想1.4 参考文献 単一責任のクラス設計 メモ 単一責 …