skillup

技術ブログ

プログラミング全般

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

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

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

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

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

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

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

ログインしたままにする

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

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

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

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

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

ログインのRemember Me

 

-プログラミング全般
-

執筆者:


comment

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

関連記事

no image

リーダブルコードまとめ

リーダブルコードほぼ読み切ったのでまとめを。チェックリスト化して、常にこれを見ながらコードは書いたほうがよさげ 前半のまとめや参考リンクでみたものとマージします。 Contents1 変数の名称2 コ …

no image

JavaScriptライブラリ sugar

去年、JavaScriptの仕事をがりがりやった時にお世話になったライブラリsugar。 JavaScriptのライブラリというとunderscore.jsが有名ですが、こいつも結構使えるライブラリで …

no image

テストコードを読みやすくする

リーダブルコードも最終章に近づいてきましたね。 今回はテストコードについて。 以前のプロジェクトではテストコードを書いていたのですが、今携わっているプロジェクトでは書いてないです・・・ テストを書く目 …

no image

短いコードを書く

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

no image

ファジープロジェクト対策 その2

前回に引き続き、大事だと思ったこと。一部単なるフレームワークの作り方的な内容になっているかも。 Contents1 テンプレート共通化2 バリデーション3 ログ出し4 異常系の処理5 新規プラグイン+ …