![](/img/trans.png)
[英]How to maintain the hibernate session in struts2, when I created session for login user?
[英]How to maintain user login session?
我正在嘗試在我的Android應用程序中維護用戶登錄會話(1小時)。 當用戶登錄時,我從服務器接收登錄時間(StartTime)和會話結束時間(Timemout)。
我正在使用System api(System.currentTimeMillis())將收到的登錄時間+會話結束時間與當前設備時間進行比較。
我的問題是用戶可以通過更改位置或更改設備中的時鍾時間來操作System.currentTimeMillis(),並且可以具有無限次登錄會話。
我還嘗試使用SystemClock.elapsedRealtime(),它取決於啟動時間。 用戶可以通過重新啟動設備來重置或控制時間的位置。
無論如何,要維持1小時的登錄時間?
從服務器接收的StartTime和Timeout時間。
((開始時間+超時)>(System.currentTimeMillis()/ 1000))
要么
((開始時間+超時)>(SystemClock.elapsedRealtime()/ 1000))
此處的目標是確保會話不會超過特定的時間長度,而不管設備本地時間的日期/時間如何變化。 這里的一個常數是服務器的時間,因此讓我們利用它。
簡而言之,該應用始終處於兩種狀態之一。 它要么未經身份驗證並等待用戶登錄,要么經過身份驗證並在計時器上確定何時將其再次鎖定用戶。 這樣,您就不必如此頻繁地ping服務器來檢查會話狀態
如前面的鏈接中所述,System.nanoTime()是在計時器中使用的好工具,該計時器不受本地時間更改的影響。 Java文檔中的更多詳細信息
這可以在服務器端處理。 您可以在服務器上為該用戶創建一個會話,該會話將在1小時后超時(在要求中指定)。
在這種情況下,您可以通過以下任何一種方式通知用戶有關會話注銷的信息:
如果會話超時后出現任何請求,則它將在會話注銷時通知用戶。
會話過期時,服務器可以在會話注銷后向客戶端發送通知。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.