skillup

技術ブログ

プログラミング全般

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

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

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

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

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

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

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

ログインしたままにする

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

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

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

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

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

ログインのRemember Me

 

-プログラミング全般
-

執筆者:


comment

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

関連記事

no image

プログラミングを習得するときに必要な2つの大事なこと

元々私は塾で仕事をしていましたが、いろいろ紆余曲折ありましていまではWEBエンジニアとして仕事をしております。 エンジニアとしてのキャリアは3年ぐらいなので正直あまりないのですが、開発者と平行してプロ …

no image

ここ1年ぐらいで再確認したネタなど

今の現場では比較的、いわゆるモダンな環境で開発をしていることもあり、非常に勉強になります。 今の現場に入る前に10年近くはPHPをやっていますが、まだまだ知らないこと(といいますか新しいことがふえてき …

no image

テスト項目の作り方(縦項目について)

テスト項目の作り方について。 単体テスト書のレビューをしていて、なるべく効率的に網羅的にできるテスト仕様書の作成について。 納品物としてではなく、開発の高速化と品質をあげるためのテスト仕様書を。 Co …

no image

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

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

no image

JWT(ジョット)の認証に関して

セッションやtokenを使った、認証について色々書いてきましたが、今回はJWTを使った認証について。 Contents1 以前の認証がらみの記事2 JWT(ジョット)とは?2.1 ヘッダー2.2 クレ …

アーカイブ