是否有一个简短的代码技巧来检查会话是否已经开始,如果没有,则加载一个?目前我收到一个错误“会话已经开始......”如果我不管检查都输入一个会话开始。
问问题
33752 次
5 回答
41
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,但作为一个常量,专门设置为消除对幻数的需求,最好针对该常量进行测试。
于 2012-04-10T17:15:26.670 回答
8
许多人只是简单地使用@session_start()
来抑制会话已经开始的警告。替代方案通常是:
if (session_status() === PHP_SESSION_NONE) session_start();
于 2012-04-10T17:18:50.657 回答
3
试试这个条件
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
} }else{
if (session_status() == PHP_SESSION_NONE) {
session_start();
} }
如果只想避免错误,请在函数示例前使用@:
@session_start();
于 2016-06-29T22:36:03.327 回答
1
if (session_id() === "") { session_start(); }
于 2015-01-02T07:19:18.680 回答
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();
}
}
于 2017-01-10T14:38:06.567 回答