2016-03-25 13 views
0

私はPHPスクリプトの先頭に削除匿名のセッションクッキーPHP

session_start();

を使用しています。私は最近、いくつかのキャッシングを行うためにワニスをインストールしました。そのため、ユーザーが匿名(またはログインしていない)のときにPHPSESSIDが消えるようにしたいと思います。

ユーザーがログインしていない場合はPHPスクリプト(応答ヘッダーに入ります)にカスタムヘッダーを設定し、そのようなページをキャッシュすると考えました。しかし、私は正しく理解していれば、なぜワニスがキャッシュされていないのかについて、Cookieがリクエストヘッダに入っているので、これはうまくいくとは思えません。

このシナリオをどのように解決できますか?匿名ユーザーのリクエストCookieを削除するのが理想的です。

+0

私はそれがあなたを助けることができると思います。http://php.net/manual/en/function.session-destroy.php –

+0

@ JonathanParentLevesqueご意見ありがとうございます。私はsession_destroy()を試した。 anonユーザーの場合、PHPSESSID Cookieはページリロード時に依然としてリクエストヘッダーに残っています。私が紛失しているものはありますか? – hobbitty

答えて

0

ここにはいくつかの要素が含まれていますので、簡潔さの欠如を完全性に賛成してください。まず、session_destroy()は、PHPSESSIDクッキー(またはセッションクッキーを設定する既存のレスポンスヘッダーリクエスト)ではなく、サーバー側のセッションデータのみを削除します。クッキーがすでにクライアント上に存在する場合は、PHPSESSIDクッキーを有効期限のある別のものに上書きするためにsetcookie()コマンドを呼び出す必要があります。これにより、HTTPリクエスト処理後にブラウザがクッキーを削除しますPHPSESSIDクッキーが現在の要求にまだ存在し、ワニスを停止しているという事実を助けるものではありません。すべてのsession_start()コマンドを条件付きで追跡して破棄することができ、それがクライアントに到達する前に応答からセットクッキーヘッダーを削除すると、動作する可能性がありますが、非常に不安定なバンドエイドです。 session_startプロセス全体が条件付きで実行されるようにPHPのセッション処理をオーバーライドすることもできますが、これは大まかなパッチです(詳細はhttp://php.net/manual/en/class.sessionhandler.php

ワニスには特定のCookieを選択的にバイパスするためのドキュメントがありますGoogleアナリティクスのクッキー): https://www.varnish-cache.org/docs/3.0/tutorial/cookies.html キャニスターは、ワニスの観点から見ると、充填されたPHPセッションと空のセッションを区別することはできないため、ログインしている人でもワニスのキャッシュページが提供されます。私は、ワニスがPHPSESSIDクッキーを無視して、ワニスがバイパスに設定されていない適切なログインで追加のクッキーを設定して、それらのリクエストがバックエンドに渡されるようにすることをお勧めします。

+0

意味があります。私の他のアイデアは、ユーザーがログインしている場合にURLの最後に何かを追加して、ワニスがそれらのリクエストを渡すようにすることでした。しかしそれは非常にきれいな解決策ではありません、私はあなたのことをもう少し見ていきます。 – hobbitty

関連する問題