如何在没有警告的情况下销毁启动的会话

时间:2014-10-24 09:47:32

标签: php session

我疯了!

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注意(8):会话已经启动 - 忽略session_start()'。

但是,这些更改无关紧要:为什么即使会话尚未启动,blnSessionIsStarted()也会返回true,如果是,那么如何准确检测会话是否已启动,而不强制调用session_start( )之前?为什么在重新调用session_start()时会抛出通知,以及如何检测到session_start()无法被调用,即使blnSessionIsStarted()表示它已不再启动了?

1 个答案:

答案 0 :(得分:0)

您需要先致电session_start();。现在没有会议。