session_status

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

session_status返回当前会话状态

描述

session_status(): int

session_status() 用于返回当前会话状态。

参数

此函数没有参数。

返回值

参见

添加注释

用户贡献的注释 10 个注释

sasi dot viragelet at gmail dot co
9 年前
也许取决于 PHP 设置,但如果返回值不是以上这些,那么请尝试以下方法
_DISABLED = 0
_NONE = 1
_ACTIVE = 2
info at eurocron dot de
5 年前
始终使用 session_status() 来检查会话是否已启动并处于活动状态。
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_start()。

作为简写,您可以使用
@session_start()
在开头使用 @ 来抑制
PHP 注意 "会话已启动 - 忽略 session_start()"

正如 session_start() 的手册中所述,第二次调用不会造成任何危害,
它将被简单地忽略。但如果您不想收到注意,则需要使用 @。
coder dot ua at gmail dot com
10 年前
用于检查会话状态的通用函数。

<?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
2 年前
请注意 session_status() 仅适用于基于文件的会话。

基于数据库的会话状态需要根据表结构创建自定义函数。
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(); }
?>

此函数的使用更多地在于状态管理:例如,当会话被完全禁用时,更改脚本的行为。
ayon at hyurl dot com
7 年前
以下是 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 年前
如果您启动并关闭了会话,然后使用 ( session_id() === '' ) 测试会话是否处于活动状态,则它将不起作用,session_id() 即使在会话关闭时也会返回一个 ID。

在 PHP 5.4 之前,有人知道另一种方法来检查会话是否确实没有处于活动状态吗?
php at kenman dot net
11 年前
此功能的目的是在您当前代码之前,代码可能已打开会话然后将其关闭的情况下帮助您。

具体来说,如果在同一个请求周期内之前已经打开和关闭了会话,则依赖 $_SESSION、session_id() 和 SID 常量来确定会话是否处于活动状态将失败。

请参见此处的原始错误报告

https://bugs.php.net/bug.php?id=52982
solaimanshah059 at gmail dot com
5 年前
以下是一些示例,有助于您理解。

<?php

if( session_status == PHP_SESSION_NONE ) // 如果会话状态为 none,则启动会话
{
session_start();
}

?>

我们过去使用的旧方法。

<?php

if( !( isset($_SESSION) ) ) // 如果会话未设置,则启动新的会话
new session
{
session_start();
}

?>
To Top