2015-10-18 33 views
0

我真的竭盡全力解決這個問題無濟於事。對於我來說,所有類似的問題似乎並不容易理解。用戶在刷新頁面後會退出,有時會在兩次後退出......這種行爲沒有邏輯。奇怪的意外用戶註銷 - symfony 2.3.32

我對日誌文件並不熟悉,這是我第一次閱讀它們,我希望我給你的數百條適當的線。順便說一句,這些線是對一些內部Symfony的東西,我還是不明白:

[2015年10月18日20點48分18秒] request.INFO:匹配的路由「user_admin_page」 (參數: 「_控制器」: 「成員\捆綁\ ManagementBundle \控制器\ AdminController ::的indexAction」, 「_route」: 「user_admin_page」)[] []

.......

[ 2015-10-18 20:48:18] event.DEBUG:通知事件「kernel.request」到 監聽器「Symfony \ Component \ Security \ Http \ Firewall :: onKernelRequest」。 [] [] [2015-10-18 20:48:19] security.INFO:已填入SecurityContext 與匿名令牌[] []

[2015-10-18 20:48:19]事件。 DEBUG:通知事件「kernel.exception」 收聽者 「Symfony \ Component \ Security \ Http \ Firewall \ ExceptionListener :: onKernelException」。 [] []

[2015年10月18日20點48分19秒] security.DEBUG:訪問被拒絕(用戶不是 完全驗證)由 「C:\ XAMPP \ htdocs中\社區\供應商\ symfony \ symfony \ src \ Symfony \ Component \ Security \ Http \ Firewall \ AccessListener.php「 在70行;重定向到認證入口點[] []

[2015年10月18日20時48分19秒] security.DEBUG:調用認證條目 點[] []

[2015年10月18日20: 48:19] event.DEBUG:Listener 「Symfony \ Component \ Security \ Http \ Firewall \ ExceptionListener :: onKernelException」 已停止傳播事件「kernel.exception」。 [] []

......

[2015年10月18日20時48分19秒] event.DEBUG:通知的事件 「kernel.response」 到 聽者 「的Symfony \組件\安全\ HTTP \防火牆\ ContextListener :: onKernelResponse」。 [] []

[2015年10月18日20點48分19秒] security.DEBUG:寫的SecurityContext在 會話[] []

你的幫助是非常讚賞。

+0

沒有代碼顯示支持任何受過教育的猜測,但我懷疑你忘了在每個頁面加載時使用'session_start()'...當用戶登錄時調用session_start並設置會話變量是不夠的。 在將來您首先需要在每個頁面上重新開始會話的頁面中引用該會話變量。更好地說每個PHP文件加載。 –

+0

@JulioSoares,感謝您的反饋。我同意我沒有提供足夠的細節(代碼)。那麼,我不記得我在某處使用過'session_start()',我只在security.yml中配置了一些安全性,並且做了FOSUserBundle的最小配置。根據我的理解,我從這些原始的基本功能中抽象出來! –

+0

@JulioSoares,我根據你的提示給了它更多的研究。這裏有一點:Symfony使用一個組件(HTTPFoundation組件),它包含一個用於會話管理的子系統。這個子系統的目標是永遠不會使用原生的'session_' php本地函數,而是用類似但增強的函數替換它們。這就是爲什麼我昨天提到它時沒有認出它。關於我的問題的其他事情是行:'安全.INFO:與匿名令牌填充SecurityContext',當與這些關鍵字搜索時,我發現了許多相關的職位上,希望將有所幫助。我會回來 –

回答

0

謝謝大家給這個問題留出時間。顯然,這是原因和可能的解決方案:

在我的網站中,我使用了Ratchet,它是一個PHP庫,通過websockets提供實時連接。要在網頁會話連接到我使用的棘輪會話提供一個WebSocket連接:

的SessionProvider會附加一個Symfony2的Session對象每個 傳入連接對象,它會給你只讀從到 會話數據的訪問你的網頁。 SessionProvider不會與 任何Native *會話處理程序一起使用。建議您使用選擇以下Symfony的自定義保存處理程序的 之一:

MemcacheSessionHandler MemcachedSessionHandler PdoSessionHandler (開發中)RedisSessionHandler

我用了PdoSessionHandler,這使我在配置的變化來自:

framework: 
    ... 
    session: 
     handler_id: ~ 

到:

framework: 
    ... 
    session: 
     handler_id: session.handler.pdo # old configuration that caused the 

切換回舊的狀態可以解決問題。可能的解決方案如下:

  • 使用另一種方法存儲會話數據。
  • 從Symfony 2.3升級到Symfony 2.6,根據文檔,許多增強功能被添加到PdoSessionHandler,這需要額外的代碼更改。
  • 保持相同的代碼,升級Symfony2,但將處理程序名稱更改爲LegacyPdoSessionHanlder。

進一步瞭解詳細:

http://symfony.com/doc/current/cookbook/doctrine/pdo_session_storage.html http://socketo.me/docs/sessions

其他的解決方案,我沒有看到,由於本人水平有限knowlege歡迎。

+0

解決主要問題後解決的另一個問題是,我所有的js資源現在已經完全加載,而不是這種情況(總是從1/22到5/22個js文件隨機給出404) –