PHP Conference Japan 2024

session_status

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

session_status傳回目前工作階段狀態

說明

session_status(): int

session_status() 用於傳回目前工作階段狀態。

參數

此函式沒有參數。

傳回值

另請參閱

新增註釋

使用者貢獻的註釋 8 則註釋

sasi dot viragelet at gmail dot co
9 年前
可能取決於 PHP 設定,但如果傳回值不是上述值,則使用以下值
_DISABLED = 0
_NONE = 1
_ACTIVE = 2
info at eurocron dot de
5 年前
請務必使用 session_status() 來檢查 session 是否已啟動且作用中。
if(session_status() !== PHP_SESSION_ACTIVE) session_start();

if(session_status() === PHP_SESSION_NONE) session_start();

不要使用
if(!isset($_SESSION)) session_start();

if(session_id() === "") session_start();

它們在呼叫 session_write_close() 之後將無法正常運作。
這兩個函式都會繼續回報 session 存在。
這是正確的,您可以從 $_SESSION 讀取,但如果要寫入,
則需要再次使用 session_start()。

您可以使用以下簡寫
@session_start()
在開頭加上 @ 以抑制
PHP 通知「session 已啟動 - 忽略 session_start()」

如 session_start() 手冊所述,第二次呼叫不會造成任何損害,
它只會被忽略。但如果您不想收到通知,則需要使用 @。
coder dot ua at gmail dot com
11 年前
用於檢查 session 狀態的通用函式。

<?php
/**
* @return bool
*/
function is_session_started()
{
if (
php_sapi_name() !== 'cli' ) {
if (
version_compare(phpversion(), '5.4.0', '>=') ) {
return
session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
} else {
return
session_id() === '' ? FALSE : TRUE;
}
}
return
FALSE;
}

// 範例
if ( is_session_started() === FALSE ) session_start();
?>
polygon dot co dot in at gmail dot com
3 年前
注意,session_status() 僅適用於基於檔案的 session。

基於資料庫的 session 狀態需要根據資料表結構使用自定義函式。
php at pointpro dot nl
11 年前
ive_insomnia at live dot com 的建議應該非常謹慎地參考。

首先,雖然他使用 session_status 的案例有效,但避免警告的更簡單方法是

<?php
if (!isset($_SESSION)) { session_start(); }
?>

session_status 的範例使用的是專門為避免使用魔術數字而創建的常數原始值(在這種情況下為 2)。

更好的程式碼是

<?php
if (session_status() !== PHP_SESSION_ACTIVE) {session_start();}
?>

也可以使用以下方法做到同樣的效果

<?
if (session_id() === "") { session_start(); }
?>

此函式的用途更多地體現在狀態管理方面:例如,在 session 完全被禁用時更改腳本的行為。
ayon at hyurl dot com
8 年前
以下是 session_status() 的運作方式
<?php
function session_status(){
if(!
extension_loaded('session')){
return
0;
}elseif(!
file_exists(session_save_path().'/sess_'.session_id()){
return
1;
}else{
return
2;
}
}
?>
Ben (aocool at msn d0t com)
8 年前
另一個用於判斷工作階段是否已啟動的函式

function is_session_started () {
return function_exists ( 'session_status' ) ? ( PHP_SESSION_ACTIVE == session_status () ) : ( ! empty ( session_id () ) );
}
Ollea
10 年前
如果您啟動並關閉了一個工作階段,然後使用 test ( session_id() === '' ) 來檢查工作階段是否處於活動狀態,這將不起作用,因為即使工作階段已關閉,session_id() 也會返回一個 ID。

在 PHP 5.4 之前,有人知道其他方法可以檢查工作階段是否真的未處於活動狀態嗎?
To Top