【发布时间】:2014-10-24 18:15:11
【问题描述】:
我要疯了!
function initialize() {
session_start(); //EDITED
if(blnSessionIsStarted() && !session_destroy()) // Destroy session on disk
return false;
...
if(!blnSessionIsStarted() && !session_start()) //EDITED
return false; //EDITED
} //EDITED
function blnSessionIsStarted()
{
//From: http://uk3.php.net/manual/en/function.session-status.php#113468
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;
}
在我的网站中,这会返回一个
PHP WARNING (2): session_destroy(): Trying to destroy uninitialized session
在blnSessionIsStarted() 内,session_id() 包含一个非空会话字符串,因此该函数返回 true。我正在使用 PHP 5.3.10。我想摆脱这个警告,但是在我阅读的任何地方,使用的代码似乎都是最好的做法。我错过了什么吗?
编辑 根据一些用户的建议并查看他们的反馈,我添加了一些经过编辑的行。 但是,现在它返回另一个错误(通知)“PHP NOTICE (8): A session has already been started - ignoring session_start()”。
但是,这些更改是无关紧要的:为什么 blnSessionIsStarted() 会在会话尚未开始的情况下返回 true,如果是这样,如何在不强制调用 session_start( ) 前?以及为什么在重新调用session_start()时会抛出一个通知,以及如何检测到一个session_start()不能被调用,即使blnSessionIsStarted()说它不再启动了?
【问题讨论】:
-
你在任何地方都给
session_start()打电话吗?在致电initialize()之前? -
@Kleskowy 是对的!在调用
initialize()之前或在函数 initialize() 中的 if() 之前启动会话