2010-06-15 20 views
2

我有一個應用程序正在對過濾器中的外部服務器進行身份驗證。在該過濾器,我嘗試使用的Symfony的setAttribute()方法設置一對夫婦在用戶會話屬性:在會話結束時是否有Symfony回調?

$this->getContext()->getUser()->setAttribute('myAttribute', 'myValue'); 

什麼我發現是,如果我設置屬性後立即拋售$_SESSION。另一方面,如果我撥打getAttribute('myAttribute'),我就會回到我剛纔輸入的內容。

一直以來,我假設讀/寫用戶屬性是讀/寫會話的同義詞,但似乎是一個不正確的假設。是否有計時問題?我沒有收到任何非對象錯誤,所以似乎用戶已完全初始化。

這裏的斷開連接在哪裏?

謝謝。

UPDATE

這發生的原因是因爲我在myUser::shutdown()一些代碼,清理出了一堆東西。由於myUser鬆散地等同於$ _SESSION(至少在屬性方面),因此我假定在每個會話結束時調用shutdown()方法。不是。它似乎在每次請求結束時被調用,這就是爲什麼我的屬性從未被設置。

現在,我仍然想知道是否有會話關閉回調。有人知道嗎?

回答

1

根據你的會話處理方式,會話存儲類有兩個方法,sessionGC(在垃圾回收器上調用)和sessionDestroy。

您可以創建自己的會話類,擴展您目前正在使用的任何一個會話類,我們使用Doctrine/PDO。缺省值是sfSessionStorage。

要改變你用什麼類編輯factories.yml文件:

all: 
    storage: 
    class: mySuperNewSessionStorageClass 
+0

謝謝。我討厭不得不改變我的配置和擴展會話類來覆蓋一個方法,但它絕對是一個有效的解決方案。 – 2010-06-16 15:27:29