一、官方 session_status() 返回值為:
PHP_SESSION_DISABLED
會話是被禁用的。PHP_SESSION_NONE
會話是啟用的,但不存在當前會話。PHP_SESSION_ACTIVE
會話是啟用的,而且存在當前會話。
二、嘗試打印var_dump(session_status()); 值總為int 1
與官方描述不一樣,google it,當打印時,會顯示如此:
-
0 ----> PHP_SESSION_DISABLED if sessions are disabled.
-
1 ----> PHP_SESSION_NONE if sessions are enabled, but none exists.
-
2 ----> PHP_SESSION_ACTIVE if sessions are enabled, and one exists.
三、思考何時返回 0 或 2 。
1、嘗試加上session_start(),打印出了2。
session_start();
var_dump(session_status()); // int 2
說明:PHP_SESSION_ACTIVE 是指使用了session_start() 啟動新會話或者重用現有會話.
2、嘗試在session_start() 后使用 session_destroy(),期望得到0。
session_start();
session_destroy();
var_dump(session_status()); // int 1
說明:結果輸入1,證明,現在session狀態為 “PHP_SESSION_NONE
會話是啟用的,但不存在當前會話”。
3、於是思考,當session不能用時狀態才為 “PHP_SESSION_DISABLED
會話是被禁用的”,即返回0。
於是修改php.ini session.save_handler = 'cached',重啟php,此時,有個warning,同時,返回0;
說明:只有當session 無法使用時,session_status 才返回 0.
————————————————————————————————————————————————————————
總結,要判斷是否需要使session_start()函數,可以這樣:
if(session_status !== PHP_SESSION_ACTIVE){
session_start();
}
或
if(session_status !== 2){
session_start();
}