2


2

セッションがタイムアウトした後、phpアプリはどのようにユーザーを識別しますか?

PHPアプリがユーザーがログインしているかどうかを確認する方法を理解しようとしています。 私は特にメディアウィキのコードを見て理解を助けようとしていますが、これらのケースはすべてのPHPアプリでかなり一般的です。

私が収集したものから、主なケースは次のとおりです。

  1. ユーザーがページにアクセスするたびに、ログインしたばかりまたは作成されたユーザー PHPは、$ _ SESSION変数とCookieに共通のデータをチェックすることでそれらを認識します。

  2. ユーザーがログインページで[記憶する]オプションをオンにしている 時間前。 彼らはトークンIDを持つコンピューター上にCookieを持ち、サーバー上のトークンを使用してそれらを認証します。 この場合、アクセス間の時間は数週間になる可能性があるため、セッション変数はありません。

私の質問は、ユーザーがログインしているが、PHPセッションがタイムアウトになり、ユーザーがページにアクセスしたい場合はどうなりますか? 私は、サーバーがその人物が誰であるかを知る簡単な方法はないと想定していました。また、ログインページにリダイレクトする必要があります。

ただし、me​​diawikiはまさにそれを行います。 セッションファイルがX分後に削除されることを確認しましたが、mediawikiで更新を実行すると、自分がどのユーザーであるかがわかり、「トークン」変数がCookieに含まれません。

3 Answer


4


セッションの有効期限が切れたときにログインページにリダイレクトしたくない場合は、ユーザーがログインしたときに作成されたCookie * ( "remember me"をチェックします) セッションを再作成します

また、セッションを再作成するとは、ユーザーを再ログインすることを意味します。

つまり、Cookieにはユーザーを識別するのに十分なデータが含まれている必要があります。

 +
もちろん、CookieはHTTPリクエストごとにネットワークを通過するため、*プレーンテキストで少なくともログイン+パスワードをCookieに保存することはできません。安全ではないでしょう。

しかし、保存する方法を見つける必要があります…​ 十分なデータ;ログイン、および場合によっては、Cookie内のログインが実際に誰であるかをユーザーが判断するために使用できるハッシュのようなもの。

以下に、興味深いと思われる質問と回答をいくつか示します。


1


答えはクッキーです。 セッションの有効期限が切れると、サーバーには、ブラウザから送信されたもの以外のユーザーを識別する方法がありません。 そのため、アプリケーションはCookieデータを使用してセッションを透過的に再構築します。 Cookieの有効期限が切れているか削除されている場合、ログインページへのリダイレクトが唯一のオプションです。


0


グー質問。 さて、ほとんどの「記憶」機能はCookieを使用して実装され、ユーザーを検証する「トークン」を保存します。

これが行われず、Cookieがサーバーに送信されない場合、唯一可能な方法は、一連のパラメーターに基づいてサーバーが「推測」していることです。 これらのパラメーターには、IP、ユーザーエージェント文字列などが含まれます。 しかし、これは多くの場合に機能する可能性がありますが、セキュリティリスクを表しているため、ベストプラクティスとは見なされません。 Ex. 多くのユーザーがネットワーク、プロキシサーバーなどを共有しています…​ 最悪の場合、ユーザーが他の人のアカウントにログインする可能性があります。