2016-02-19 87 views
0

我已經爲登錄系統創建了會話表,當用戶登錄成功時,隨即生成一個會話密鑰並與登錄用戶的用戶標識關聯,並在會話表中添加了一個expirytime列,默認值是當前+一小時後的時間戳,即如果時間是17:10:32那麼在該列時間將是18:10:32。所有這些都添加到數據庫中。在登錄會話密鑰被選中,這個時間是由該命令檢查: "SELECT * FROM active_sessions where session_key = :asession and expirytime > NOW()"驗證會話和mysql時間

我的問題是,當會話期滿的情況下(即expirytime列的時間已過期),那麼是有可能,如果有人更改他的電腦時間,然後我的上面的查詢將成爲真實的,過期的會話將被使用。

其次,無論如何,一個會話只能通過它創建的設備(爲了防止竊取cookie並在其他設備上使用它們)使用它。謝謝

+2

NOW()使用並返回服務器時間,而不是用戶一。 – mitkosoft

+0

所以系統時間不會影響查詢。 OK –

回答

1

現在()會返回服務器時間,所以用戶更改本地時間不會影響到期流量。

按照確保會議僅適用於發起機,將可能想要做的幾件事情:

一些令牌
  • 副會話ID。
  • 捕獲用戶代理,IP地址等並將它們與會話詳細信息一起存儲在數據庫中。
  • 同時驗證IP和用戶代理等的會話和過期檢查。

這些不會給你100%的保護,但你會有一些開始。

+0

如果我關聯了令牌,那麼它們將被保存在cookies和db中,所以當cookie被盜時,令牌也會與它們一起使用。 –