skillup

技術ブログ

プログラミング全般

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

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

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

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

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

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

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

ログインしたままにする

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

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

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

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

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

ログインのRemember Me

 

-プログラミング全般
-

執筆者:


comment

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

関連記事

no image

コーディングについての気づき

現在の現場でコーディング関連で勉強になっているポイントについてまとめてみようかと思います。 Contents1 自動化2 命名3 責務の分離4 その他 自動化 規約エラーなどなるべく自動化できるものは …

no image

画面の制御フローなど

複雑な帳票系アプリではよくあると思うのですが、ある入力値が複数の場所から影響を受けており、制御がなかなか難しいときなどがあります。 例として クリアボタンなどでクリアされる 他のプルダウンなどで影響を …

no image

コードの分割

今回はリーダブルコードの8章。コードの分割について。 ポイントとしては1行に情報を詰め込みすぎているような場合は分割して、意味がわかりやすい区切りにまとめよう、といったことでしょうか。つまりは「困難は …

no image

OSコマンドインジェクション

Contents1 OSコマンドインジェクションとは?2 被害3 対策4 参考リンク OSコマンドインジェクションとは? OSに対する命令文を不正に紛れ込ませて攻撃させる手法。 被害 サーバー内のファ …

no image

読みやすいコードについて

コードリーディングにおいて聖典となっているリーダブルコードについて読んでいこうかと。 ただ読んでいくだけではつまらないので、自分なりの考え方も書いていきます。 Contents1 優れたコードの定義1 …

アーカイブ