2011-09-28 40 views
3

我的用戶在Doctrine中設置了一些關係,但其中一個似乎造成了很多問題,每個用戶都可以擁有多個成員資格,並且每個成員資格都具有成員資格類型。用戶關係正在破壞我在Symfony2中的會話

由於某些原因,但是當我加載這些會員資格時,它似乎在加劇我的會話,我登錄並顯示一個「您的帳戶」頁面,因爲我應該這樣做,但如果我刷新頁面,我會發回登錄屏幕。我的會話存儲在數據庫中,所以我一直在檢查他們看看會發生什麼,這是我所看到的:

  1. 會議開始了空
  2. 我登錄,但要確保我重定向到一個頁面不會加載成員
  3. 會話現在包含用戶對象和關係關係的所有信息
  4. 我訪問加載成員資格的「您的帳戶」,它們會正確顯示。
  5. 會議已經核爆,現在是因爲它是在步驟1中
  6. 我刷新頁面,

我定義我自己的用戶提供送回到登錄頁面,如果我發現我將refreshUser中的每個成員資格的成員類型設置爲null,它開始工作,所以我猜測會話在這種關係中遇到了問題。

我真的很努力地找到解決方案,所以任何幫助將非常感激。

編輯:做了一些更多的實驗,發現如果我切換到文件會話一切都開始工作,所以它必須與存儲會話在數據庫中相關。我使用Symfony Cookbook中的指南製作了開關。僅供參考這裏的相關位從我config.yml:

framework: 
    session: 
     default_locale: %locale% 
     auto_start:  true 
     storage_id: session.storage.pdo 

parameters: 
    pdo.db_options: 
     db_table:  session 
     db_id_col:  session_id 
     db_data_col: session_value 
     db_time_col: session_time 

session.storage.pdo: 
    class:  Symfony\Component\HttpFoundation\SessionStorage\PdoSessionStorage 
    arguments: [@pdo, %session.storage.options%, %pdo.db_options%] 
pdo: 
    class: PDO 
    arguments: 
     dsn:  "mysql:dbname=%database_name%;host=%database_host%" 
     user:  %database_user% 
     password: %database_password% 

其他一切關於他們似乎罰款,所以也許它在PdoSessionStorage

回答

0

這可能是你的equals方法是過於嚴格的錯誤。如果你做$ user === $ otherUser;並且對象已經改變(與代理不再有關係),它將返回false。

+0

嗨Henrik,我不認爲就是這樣。目前我的等號檢查只是比較id(希望稍後改進),我只是嘗試記錄每個響應,它總是返回true。 – pogo