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


How to destroy a started session without warning?

我快疯了!

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()时会发出通知,以及如何检测到即使blnSessionIsStarted()表示它不再启动,也无法调用session_stat()?

您需要先调用session_start();。现在没有会话。