我正在MySQL數據庫中創建一個表來保存一些會話數據,包括session_id
。 VARCHAR
用於存儲session_id
字符串的長度應該是多少?什麼是PHP會話ID字符串的長度?
回答
取決於session.hash_function和session.hash_bits_per_character。
查看session_id頁面瞭解更多信息。
越高你session.hash_bits_per_character越短你的 SESSION_ID設置將成爲每個字符使用更多的比特。可能的 值是4,5,或6。
當使用SHA-1散列用於(通過設置 的ini_set(「session.hash_function」,1)下面的會話串 長度由三個會話產生的。 hash_bits_per_character 設置:
4 - 40字符串
5 - 32字符串
6 - 27字符串
這取決於這些配置設置: session.hash_function和session.hash_bits_per_character
較短的會話ID的長度有碰撞的機率較高,但這也取決於ID生成算法很多。鑑於默認設置,會話ID的長度應該適用於大多數應用程序。對於更高安全性的實現,您可以考慮查看PHP如何生成其會話ID並檢查它是否具有密碼安全性。如果不是,那麼你應該用一個密碼安全的隨機源來推出你自己的算法。
@sachleen回答不全。
關於會話ID長度的更詳細的信息被描述爲here。
摘要:
128-bit digest (MD5)
4 bits/char: 32 char SID
5 bits/char: 26 char SID
6 bits/char: 22 char SID
160-bit digest (SHA-1)
4 bits/char: 40 char SID
5 bits/char: 32 char SID
6 bits/char: 27 char SID
而且樣本正則表達式來檢查會話ID:
preg_match('/^[a-zA-Z0-9,-]{22,40}$/', $sessionId)
這對我很有幫助! – SirJ
優秀的答案,對我來說缺少一個難題。 –
通過常規PHP安裝長度總是26(exmp:psprdaccghmmre1oo2eg0tnpe6)
- 1. 確定會話ID字符串長度以確保唯一性
- 2. 爲什麼字符串的字節長度比長度長?
- 3. facebook id字符串長度
- 4. 爲什麼stream.size總是比字符串的長度長
- 5. PHP字符串長度
- 6. 爲什麼字符串長度不同?
- 7. 字符串的長度比字符串的長度長
- 8. 什麼是將被散列的字符串的最大長度?
- 9. 爲32字符長的串(PHP的會話ID)推薦列類型
- 10. 爲什麼我的字符串長度總是顯示爲長度2在iPhone?
- 11. var_dump報告錯誤的字符串長度是什麼意思?
- 12. 什麼是JavaScript字符串的安全長度?
- 13. 我不知道爲什麼字符串的長度是'0'
- 14. PHP串聯,字符串長度= 0
- 15. Tomcat中的會話ID長度
- 16. PHP長度的空字符串32
- 17. C#中的字符串性能 - 什麼是更快地比較,字符串文字或字符串長度
- 18. 爲什麼字符長度很長時會出現在底部?
- 19. 好奇會話行爲(文件名字符串長度)
- 20. 經典ASP - 會話ID長度
- 21. 什麼是PHP的C#ReadBytes(流長度)?
- 22. access_token字符串的長度是多少?
- 23. PHP條件循環 - 字符串長度
- 24. PHP中使用字符串長度
- 25. 在PHP中檢查字符串長度
- 26. php長度或計數字符串
- 27. 什麼是建立一個字符串,如果我有字符和長度
- 28. 什麼是「使用兩倍於寬度的長度打印字符串」。意思?
- 29. PHP檢查字符串是否包含數字和檢查字符串長度
- 30. bash的字符串長度
所以40個字符是一個安全的設置,如果我想保存一些字節,我必須檢查php配置,對吧? – Gustavo
檢查php.ini以查看設置是什麼。 40個字符是SHA-1散列函數的結果,每個字符4位。你可以做'echo strlen(session_id());'查看長度並相應地創建你的數據庫字段。 – sachleen
作爲參考,如果您使用MD5散列函數和每個字符4個散列位,則session_id長度也將爲32。這讓我今天把頭髮撕掉了幾個小時。 – sevenseacat