是否有一个简短的代码技巧来检查会话是否已启动,如果没有则加载一个?目前,如果无论是否进行检查,我都会收到会话启动时收到错误“会话已启动...”。
答案 0 :(得分:36)
isset
通常是检查当前是否定义了预定义变量的正确方法:
如果您使用的是5.4之前版本的php ,
你通常可以通过下面的代码来逃避和诱惑它,但要注意,如果由于某种原因禁用会话,仍会调用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,但由于它是一个专门设置为消除对幻数的需要的常量,因此最好对常数进行测试。
答案 1 :(得分:7)
许多人只是使用@session_start()
来抑制会话已经启动的警告。替代方案通常是:
if (session_status() === PHP_SESSION_NONE) session_start();
答案 2 :(得分:3)
试试这个条件
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
} }else{
if (session_status() == PHP_SESSION_NONE) {
session_start();
} }
如果您只想避免错误,请在函数前使用@ 例如:
@session_start();
答案 3 :(得分:1)
if (session_id() === "") { session_start(); }
答案 4 :(得分:0)
在开始新节目之前检查现有会话:
// # 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();
}
}