前提・実現したいこと
現在、PHPでログインが必要とするサイトを作成しています。
サイト内は基本的にログインしている状態で移動することになりますが、そのログインを識別する方法で悩んでいます。
Webで検索してみると、基本的にログインの識別にはSessionを使用する、と記載されており、
セキュリティー上Cookieは自動ログインにのみ使用すると書かれていました。
今回、自動ログイン機能ありでの作成を試みているのですが、正直Sessionを使わないといけない理由がよく分かっていません。
###現在考えている大まかなログイン方法
ログイン時にランダムな文字列を生成し、その値をCookieとDBに保存する。(ログイン維持用・期間は1週間ほど)
サイト内のページを訪れるとCookieの値をDBへ検索にかけて、ユーザーを識別、ログインしていると判断。
無かった場合は再度ログインを求める。
###ログインにSessionを使う場合
ログイン時にランダムな文字列を生成し、その値をCookieとDBに保存する。(自動ログイン用・期間は1週間ほど・このCookieの値はログインページでのみアクセス出来る)
また同時にSessionを作成し、Sessionの中にユーザー名などのログイン情報を記録。(Sessionはブラウザが閉じれば消滅)
サイト内のページを訪れるとSessionが存在しているか確認し、ログインしていると判断。
無かった場合はログインページへ移行し、自動ログインを試みる。不可能であった場合再度ログインを求める。
Webを調べた感じ、おそらくSessionを使う場合はこのようなログイン方法になるかと思います。
###疑問点
○わざわざSessionを使う必要がありますか?
Cookieの場合は毎回DBにアクセスする必要がありますが、今回のサイトでは最終ログイン時間を記録したいのでどちらにせよDBには毎回アクセスします。
セキュリティー面で考えてみても、Cookieを盗聴されれば他の人が成り済ましてアクセス出来るという話ですが、
SessionでもCookieは使用されていますし、そのCookieを盗聴されたら同じではありませんか?
○それでもSessionが必要な場合、Sessionには何を保存すべきですか?
Session内に$_SERVER['HTTP_USER_AGENT']の値を保存させて、ある程度のSessionの本人確認は可能かもしれないと思いました。でもこの値も偽造できますよね?しかもCookieを盗聴出来るわけですから恐らく簡単にその人の$_SERVER['HTTP_USER_AGENT']も取得出来ると思うんです。となると、他にSessionの方が有利になる何かがあると思うのですが、何かあるのでしょうか?


回答3件
あなたの回答
tips
プレビュー