2009-08-11 125 views
0

我使用codeigniter的會話類來處理我的PHP會話。一到站點每次訪問自動創建的會話變量是SESSION_ID:codeigniter會話類的安全超時值?

用戶的唯一的會話ID(這是一個統計學的隨機字符串具有非常強的熵,使用MD5加密的便攜性,和再生(默認)每五分鐘)

我的網站上我需要的功能來跟蹤註冊用戶的,我現在有這個訪問者的SESSION_ID與價值存儲的ID在訪問者數據庫中的表進行比較來實現。除了會話標識每五分鐘超時之外,這種方式完美無缺。我希望我的應用程序記住訪問者的時間超過5分鐘(有點像您在發佈問題或回答時沒有註冊時的操作)。

我的問題是:你能看到任何安全問題,只需延長會話類的再生時間(如12小時)?

更新:根據迄今爲止所見的答案,它似乎更像是一個性能問題而非安全問題。它有點奇怪,codeigniter會話類是如何工作的,因爲當創建一個新的會話時,它也會創建一個新的cookie,這個cookie似乎只要會話就存在。我想我可以用會話ID創建另一個cookie,持續時間只要我需要它。但是,如果我要將會話保存12小時,會有多少性能問題?它會減慢速度,除非我在12小時內有數百萬的獨立訪問者(在這種情況下,我會有更大的問題擔心......)?

回答

1

兩件事情有這種想法:

  • 如果用戶去從他們的計算機遠(無鎖它/關閉瀏覽器),別人可能會用它來進入您的網站與自己的帳戶
    • 好,這可能不是你的問題
    • 如果你有一些登錄/密碼字段,你的用戶或許已經有了自己的登錄名+密碼由瀏覽器存儲反正(當然,對於registedredØ NES,反正 - 那些可能有更多的「權力」比未註冊的)
  • 如果你有大量的用戶在你的網站,你將有更多的會話文件
    • 作爲會話存儲在文件
    • (相同的,如果它們存儲在DB/memcached的 - 在這種情況下,你必須確保你已經配置的memcached所以有足夠的內存來存儲更多的會話)

所以,是的,存在一個小的安全風險;但我不認爲這是真的有關。


另一個想法是保持一個短的會話生命週期,但要將一些信息存儲在cookie中,並且一生比這更重要?
足夠的信息,實際上,允許重新創建一個新的會話,而不需要用戶注意任何東西?

但是,是的,這將需要在你身邊更多的工作...


您的編輯之後添加更多的精度:

它有點奇怪怎麼笨因爲當 創建一個新的會話時,它也 創建一個新的cookie,似乎 只要會話持續。

這是處理會話的「標準」的方式 - 至少,在PHP中:

  • 會話的數據被存儲在一個文件,在磁盤上,在服務器上
  • 和cookie用於保持用戶和包含其會話信息的文件之間的「鏈接」。如果沒有該cookie,就無法知道哪些文件中包含特定用戶的會話。

但如何表現的關注 的多會是如果我要保存像12小時 會議?

如果您的網站擁有數百萬用戶,這意味着擁有數百萬個文件,每個文件都包含一個用戶的會話數據 - 並且文件太多也不好。
但是,你是有幾百個用戶,這應該是好的,我猜。

0

根據您網站訪問者的數量,保存12小時的會話可能不是一個好主意。爲什麼不使用cookie?這取決於用戶是否在瀏覽器中啓用了它:http://www.php.net/setcookie

+0

我的理解可能off..but做會議甚至可以一次頁面被關閉保存? – oym 2009-08-11 04:55:44

+1

我對這種混淆表示歉意,也許我誤解了。會話有一個默認設置超時期服務器端。即使用戶關閉瀏覽器,會話也可能會持續存在,具體取決於設置的超時時間。 – 2009-08-11 05:16:40

0

一個安全提示:

離開sess_match_useragent(application/config/config.php)