2013-12-11 94 views
2

我有我的Symfony 2應用程序的自定義登錄表單。在這個表單中,我有一個選項字段,它有多個選項來設置登錄會話的最大空閒時間。我希望能夠在登錄操作中設置會話生存期。不幸的是,登錄存儲在FOSUserBundle中,這將不能被修改,因爲未來更新的捆綁包。

這就是我發現到目前爲止,糾正我,如果我錯了:
首先在一段時間後symfony中的生命可以被破壞,如描述here
其次,我必須能夠捕獲/攔截登錄操作/驗證以在parameter.yml中設置參數。
然後可以在偵聽器中使用該參數來檢查maxlifetime是否未超出。

所以我的問題是分裂在其他兩個問題:Symfony 2:如何在登錄時設置會話生存期?

  1. 如何趕上/攔截登錄操作/驗證?
  2. 有沒有辦法創建一個偵聽器來檢查閒置時間而什麼都沒有發生(或者可以檢查下一個請求)?

在此先感謝

回答

2

我猜,

  1. 您需要登錄成功處理程序。閱讀以下內容,瞭解,

    Symfony2 Login and Security

  2. 你也可以寫爲控制器/內核請求活動您可以比較用戶的空閒時間的事件監聽。

    http://symfony.com/doc/current/cookbook/service_container/event_listener.html#request-events-checking-types

據我所知,這是不添加參數值,這種要求是一個好主意。

如果您需要銷燬用戶會話,爲什麼不在設置身份驗證成功處理程序的登錄時間(可以將其保存在會話或用戶實體上次登錄時),以及在控制器偵聽器中,您可以比較登錄的長度並重置用戶會話?

+0

非常感謝。這似乎工作得很好。我還有一個問題:如何在認證處理程序的selectfield中獲取存儲值?我想這可以用Javascript和AJAX來完成,但我想避免這種情況。如果您已存儲在實體中,則爲 –

+0

; $ em = $ this-> container-> get('doctrine') - > getEntityManager();因爲它是容器意識。 – Chathushka

+0

那就是這個問題。登錄表單沒有連接到實體(原因很好,它是一個登錄表單)。表單發佈到我無法控制的FOSUserBundle上。所以在這裏使用教義不是一個選項。 –

相關問題