【问题标题】:Destroy a particular session销毁特定会话
【发布时间】:2016-09-15 06:50:17
【问题描述】:

我读到了destroy a particular session using its ID in pure PHP 的方法,我想使用 Symfony 服务和组件来做同样的事情。 这必须在控制器之外完成(例如控制台命令)。

但是,我找不到任何处理 session_commit 方法的服务/组件。

我应该使用它还是我错过了任何服务/组件?

【问题讨论】:

  • 由于 session_destroy 不带 ID,它会破坏当前会话,肯定会破坏 Symfony 建立的会话。如果要销毁会话,则不需要 Session_commit。

标签: php symfony


【解决方案1】:

以下是一种使用其 ID 终止会话的方法(抱歉,我没有时间测试该代码,但它应该可以正常工作)。

use Symfony\Component\HttpFoundation\Session\Session;

$session_id_to_kill = 'xxxxxxxx';

$session = new Session();
$session->setId($session_id_to_kill);
$session->start();
$session->invalidate();

如果您有一个活动会话(您通过控制器操作执行此操作),您必须先停止它,然后在杀死另一个会话后恢复它。

$request->getSession()->stop(); // Stop the current session

// Kill the session using the same code as above

// Restart you session
$request->getSession()->start();

【讨论】:

  • 谢谢。你的代码看起来不错。我将在下周尝试使用它。
【解决方案2】:

回答您的问题:http://symfony.com/doc/current/components/http_foundation/sessions.html#session-data-management

在您的控制器中,您将拥有您的请求对象。出于一般目的,您可以使用

$request->getSession()->clear(); 

$request->getSession()->remove("sessionKey");

更多信息,您可以阅读http://symfony.com/doc/current/components/http_foundation/sessions.html

example: getStorageKey()

返回包最终将其数组存储在 $_SESSION 中的键。一般这个值可以保留默认值,供内部使用。

全部在上面提到的文档中

【讨论】:

  • 这不是我需要的。您的代码从当前会话中删除特定键。我需要删除一个特定会话(即不是当前会话)。
  • $request->getSession() === 当前会话。这不是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2015-05-12
  • 2011-10-07
  • 1970-01-01
  • 2012-01-02
  • 2017-11-13
  • 2011-11-25
相关资源
最近更新 更多