嗯,這可能聽起來有點奇怪。我們在特定的條件下遇到了特定瀏覽器的問題,並最終縮小了問題的範圍,因爲在執行session_regenerate_id()之後我們沒有正確銷燬舊會話。我相信我現在通過執行session_regenerate_id(true)來解決這個問題,但是如何驗證之前的會話是否真的不再存在?有人建議cURL,但我找不到他們的文檔。可悲的是(?)老闆不接受'它只是作品'的答案,所以我非常感謝任何建議!如何驗證舊會話是否真的被破壞?
回答
默認情況下session_regenerate_id();
將只更換一個新的當前會話。所以舊的會話文件不需要真正被刪除。 但是做一個session_regenerate_id(true);
將刪除舊的會話文件。 (http://php.net/session_regenerate_id)
要檢查是否舊會話被刪除,你可以做這樣的事情
<?php
$file=ini_get('session.save_path')."/sess_".session_id();
$gotDeleted = file_exists($file);
?>
你也可以做一個session_destroy()
。如果你必須保留一些變量,你可以嘗試unset()
對特定的$_SESSION
值。
是的,在大多數情況下都是如此,但在某些特殊情況下,它不會起作用。特別是在代碼中使用session_name(「WHATEVERNAMESESSID」)時。您無法移除它。會話仍然存在,直到瀏覽器(firefox)關閉。很奇怪! – B4NZ41 2013-07-09 19:39:17
爲了確保會話數據消失,您應該查看保存後端的會話。默認情況下,它將會話存儲爲普通磁盤文件(這就是爲什麼會話在apache重新啓動時仍然存在的原因)。您可能希望查看它們,並檢查與您正在觀察的會話相對應的一個是否已被有效刪除。或者,如果這是一個重要信息,您可能想要構建自己的會話後端(這並不難),以便擁有更多的控制權和更多的調試選項(您可以手動銷燬數據並您可以添加日誌記錄語句來證明數據已被刪除)。
在這裏看到:http://php.net/manual/en/function.session-set-save-handler.php
- 1. 會話是維護還是被破壞?
- 2. TokBox會話被破壞
- 3. 會話變量被破壞
- 4. Symfony 2會話被破壞
- 5. Logut會話不被破壞
- 6. cycle_key是否破壞以前的會話?
- 7. Excel驗證中的OR函數是否被破壞?
- 8. IBM RAD 8中的JSPF驗證是否被破壞?
- 9. 內存是否會被破壞?
- 10. 如何破壞會話?
- 11. 奇怪的錯誤會話被破壞
- 12. jsonToRepJson是否被破壞?
- 13. DataRequired驗證器被破壞wtforms.BooleanField
- 14. Codeigniter會話自動被破壞?
- 15. 會話被破壞後引發函數
- 16. 重定向後PHP會話被破壞?
- 17. 爲什麼PHP會話被破壞?
- 18. 會話被破壞掉了PHP
- 19. PHP會話在子域上被破壞
- 20. facebook註銷會話不被破壞
- 21. 破壞前驗證
- 22. 會話不破壞
- 23. Cakephp會話破壞
- 24. Cookie破壞會話破壞,爲什麼?
- 25. Rails 4協會驗證破壞
- 26. 破壞特定會話的會話Funda
- 27. Spring Security - 用戶通過會話破壞進行身份驗證
- 28. 新的PHPMailer()破壞會話
- 29. 如何驗證矢量是否真的被恢復?
- 30. 是multiprocessing.Manager().dict().setdefault()是否被破壞?
看起來像這樣的人往往upvote他們不明白的問題。 「會話」下的意思是什麼?什麼材料很重要?你爲什麼如此確定你真的縮小了這個問題? – 2010-04-27 07:02:23