3

Symfony2 コントローラーの 1 つでセッションを破棄したいのですが、次のコードを使用しています。

$this->get('session')->invalidate();

しかし、これは実際にはセッション データを削除しないようで、次のようにセッション変数を手動で削除する必要があります。

$session->remove('viewed');
$session->remove('name');

invalidate() がセッションをクリアしない理由をトラブルシューティングできる方法はありますか?

PSもしそうなら:

session_start();
session_destroy();

動作するので、サーバー/php/ブラウザーの問題ではありません。

4

4 に答える 4

7

スクリプトで無効にするセッションがあることを確認してください。

$session->start();      // Start the session...
$session->invalidate(); // ...then invalidate
于 2013-06-20T19:31:00.003 に答える
5

次のように機能します。

$request->getSession()->invalidate(1);

パラメータを指定しない場合、invalidate は現在のセッションをそのままにしておくため、有効期間を 1 (1 秒) に設定する必要があります。

http://api.symfony.com/2.6/Symfony/Component/HttpFoundation/Session/Session.html#method_invalidate

于 2014-12-01T12:37:15.283 に答える
4

試す:

$this->get('session')->clear();

それがうまくいかない場合は、これを使用できます:

$session = $this->get('session');
$ses_vars = $session->all();
foreach ($ses_vars as $key => $value) {
    $session->remove($key);
}
于 2012-11-02T18:16:40.680 に答える
1

カスタム セッション名を使用している場合は、まずその名前でセッションを開始してから、それを無効にして正常にクリアしてください。

$session = $this->get('session');

$session->setName('session_name');
$session->start();
$session->invalidate();
于 2014-08-31T18:50:29.293 に答える