【问题标题】:How to destroy a started session without warning?如何在没有警告的情况下销毁已启动的会话?
【发布时间】: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() 之前启动会话

标签: php session


【解决方案1】:

您需要先致电session_start();。目前没有会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2011-12-12
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多