1

PHPでWebサービスの認証を行っています。ユーザーが認証すると、セッションが生成されます。最終的にこのセッションは期限切れになり、ユーザーは再度認証する必要があります。認証情報はhttpヘッダーで送信されます。

ただし、変数$ _SERVER(またはapache_request_headers())が、現在のリクエストでクライアントから送信されていない(以前のリクエストで送信された)ヘッダーを返す場合があるようです。たとえば、以前のリクエストからの情報で満たされた変数$_SERVER['HTTP_RESPONSE']を取得することがあります。

$ _SERVERまたはapache_request_headers()がリクエスト間で「永続化」するのは正常ですか?

4

2 に答える 2

1

これは、ブラウザを使用してスクリプトにアクセスしているかどうかによって異なります。

「永続的な」ヘッダーはおそらくブラウザのキャッシュが原因ですが、それでも何が起こっているのか完全にはわかりません。Fiddlerを使用していくつかのテストを実行しようとしましたが、問題を再現できませんでした。

以前のバージョンのスクリプトとは異なるヘッダーが保存されている可能性があるため、キャッシュをクリアしてみてください。

ただし、ヘッダーで認証パラメータを送信することは絶対に避けます。HTTPSを使用していない限り、盗まれたり盗まれたりする可能性があります。なぜヘッダーを使用しているのですか?

于 2013-01-20T16:46:02.797 に答える
0

$_SERVERサーバーに関する情報が含まれていますが、必ずしも要求/応答情報が含まれている必要はありません。サーバーの存続期間中は永続的です(たとえば、SERVER_NAMEは永続的ですが、REQUEST / RESPONSEとは関係ありません)。

apache_request_headers()送信されたヘッダーの配列が含まれます。これらにはCookieとセッション情報が含まれる場合と含まれない場合があります。これらは、サーバーへのアクセスに使用しているクライアントによって異なります。

$ _SESSIONスーパーグローバルにアクセスするたびに、ファイルシステムに保存されたセッション情報をフェッチするため(基本的なPHP実装)、一部のフレームワークはデータベースにセッションを永続化します(基本的なPHP実装)。 Yiiなど)。

リクエストヘッダーベースの認証を作成することを想定しているので、実際に行う必要があるのは、request_headersを解析し、それらを正当なユーザー資格情報と照合することopen_session()です。そして、ユーザーを認証済みとしてマークする値をセッションに入れます。その後のチェックは、$ _ SESSIONスーパーグローバルに対して、または他のセッションの実装に対して行われます。

于 2013-01-20T16:48:18.627 に答える