2016-09-15 79 views
0

我讀了關於destroy a particular session using its ID in pure PHP的一種方法,我想用Symfony服務和組件做同樣的事情。 這必須在控制器之外完成(例如控制檯命令)。摧毀一個特定的會話

但是,我找不到處理session_commit方法的任何服務/組件。

我應該使用它還是有我錯過的任何服務/組件?

+0

由於session_destroy沒有標識ID,它會銷燬當前會話,肯定會破壞Symfony建立的會話。如果您要銷燬會話,則Session_commit不是必需的。 – Devon

回答

2

下面的方式使用其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(); 
+0

謝謝。你的代碼看起來不錯。我將在下週嘗試使用它。 –

0

要回答你的問題: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。一般來說,這個值可以保留在默認值並用於內部使用。

其所有的文檔上面提到的

+0

這不是我所需要的。您的代碼從當前會話中刪除特定密鑰。我需要刪除**特定的會話**(即不是當前的會話)。 –

+0

我剛剛編輯了答案 – Ajir

+0

'$ request-> getSession()'===當前會話。這不是我正在尋找的。 –