是否有一個簡短的代碼技巧來檢查會話是否已經開始,如果沒有,然後加載一個?目前我收到一個錯誤「會話已經開始......」,如果我將會話啓動,無論檢查。僅當會話不存在時才加載session_start()?
回答
isset
通常是檢查的預定義變量當前定義的正確方法:
如果您使用的是PHP的版本之前5.4,
,通常可以用其誘人的逃脫只是執行下面的代碼,但請注意,如果由於某些原因會話被禁用,session_start()仍然會被調用,最終會導致錯誤和不必要的調試,因爲不允許創建$ _SESSION數組。
if(!isset($_SESSION)){session_start();}
如果你想佔檢查是否會話被禁用出於某種原因
,你可以禁止該錯誤消息,設置測試會話變量,並驗證它被設置。如果不是,您可以在禁用會話的反應中進行編碼。你需要在腳本開始或接近腳本的時候完成所有這些。因此,作爲一個例子(作品不同,這取決於錯誤處理設置):
if(!isset($_SESSION)){session_start();}
$_SESSION['valid'] = 'valid';
if($_SESSION['valid'] != 'valid')
{
//handle disabled sessions
}
但是,如果你正在使用的PHP版本5.4或更高,
可以使用session_status()功能,一個更好的選擇,因爲它會佔用會話被禁用並檢查會話是否已經存在。
if (session_status() === PHP_SESSION_NONE){session_start();}
注意的是PHP_SESSION_NONE是一個常數一套由PHP,因此並不需要被包裝在引號中。它的計算結果爲整數1,但是作爲一個專門用於消除對幻數的需求的常量,最好對常數進行測試。
許多人只是簡單地使用@session_start()
來抑制會話已經啓動的警告。另一種方法通常是:
if (session_status() === PHP_SESSION_NONE) session_start();
if (session_id() === "") { session_start(); }
嘗試這個條件
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
} }else{
if (session_status() == PHP_SESSION_NONE) {
session_start();
} }
如果你只是想避免錯誤,函數 例如之前使用@:
@session_start();
您好,歡迎來到SO。您能否編輯您的帖子來解釋您的代碼的作用以及它如何解決OP的問題?只有代碼答案是不鼓勵的,並且可能會被刪除。 – 2016-06-29 22:59:37
檢查現有會話開始之前新:
// # if phpversion() is >= 5.4
if(phpversion() >= 5.4) {
// # check session_status() function for value 'PHP_SESSION_NONE'
if(session_status() === PHP_SESSION_NONE) {
session_start();
}
} else { // # maintain backwards compat. with PHP versions older than 5.4
// # if $_SESSION object if NOT set, start a new session!
if(!isset($_SESSION)) {
session_start();
}
}
- 1. PHP session_start cookie不會保存會話ID
- 2. 僅當文件存在時才加載資源字典
- 3. 僅當emacs elisp庫存在時才加載
- 4. 僅在加載時才加載圖像
- 5. 僅當圖像視圖可見時,纔會延遲加載
- 6. 僅當我刷新頁面時纔會加載Flash內容
- 7. 僅當元素進入視口時纔會加載圖像
- 8. 解決:當PHP觸發頁面加載時保存會話,但當觸發Javascript時不會保存會話
- 9. 僅當PostgreSQL表不存在主鍵時才添加主鍵
- 10. 僅當保存在Magento中時纔會顯示產品
- 11. 僅當使用ISE時纔會出現確認對話框
- 12. 僅當enableSessionState設置爲true時才能使用會話狀態
- 13. PHP session_start不會恢復會話
- 14. 僅在Crystal Report有詳細信息時纔會加載徽標
- 15. 僅當記錄存在或返回null時才加入表?
- 16. 僅當php存在時才添加前導零
- 17. 僅當數據存在時才添加條件
- 18. 僅當會話存在時彈出訪問頁面
- 19. session_start();會話cookie警告
- 20. 如何僅在加載Google Maps API時才加載jquery插件?
- 21. 僅在未加載時才加載requirejs庫
- 22. 大查詢 - 僅當列值不存在時才插入
- 23. 僅當記錄不存在時才插入數據
- 24. 僅當非空值不存在時才選擇空位?
- 25. 僅當子項不存在時,才從父項刪除行
- 26. 僅當插入記錄時纔會增加身份
- 27. XAML ListView,如何僅當項目可見時才加載圖像
- 28. Requirejs - 僅當條件爲真時才加載模塊
- 29. 僅當完全加載時才顯示圖像沒有JavaScript
- 30. 僅當用戶點擊項目時才加載內容。
感謝提供解決方案爲php <5.4 – Houston 2014-03-19 14:07:39
@nick好吧,我會說你們都發現了一個5.4.16或更可能有一個奇怪的PHP /服務器配置的錯誤。無論哪種方式,這是很好的kbow他們可能的邊緣情況:D – Rooster 2015-11-20 19:01:01