警告:session_regenerate_id():会话对象销毁失败

时间:2014-12-12 07:27:52

标签: php session

我在通过会话登录代码时随机收到以下错误;警告:session_regenerate_id():会话对象销毁在...,

中失败

我在Windows 8.1 Pro 64位上使用WAMP和PHP5.5.12



$session_name = 'seam_secure_session_id';
ini_set('session.use_only_cookies', 1);
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
session_name($session_name);
session_start();

session_regenerate_id(true);// regenerated the session, delete the old one.

ob_start();




我没有收到其他会话警告或错误,并且在任何HTML之前在我的代码开头调用登录代码。我检查了php.ini和session.save_path。保存路径上的权限很好(经过身份验证的用户,SYSTEM,管理员,用户都有完全控制权),会话文件正保存在文件夹中。

我不知所措,有什么想法吗?

由于

5 个答案:

答案 0 :(得分:4)

我认为您看到了警告,因为“session_regenerate_id(true)”尝试删除旧会话,但此时可能不会写入会话。 PHP将在脚本结束时写入会话文件,同时会话值仅在内存中。这也是我们使用session_write_close或在标题重定向之后退出的原因,因此此时已经编写了会话。

也许您可以在尝试删除会话之前检查会话是否可用?例如:https://github.com/yiisoft/yii/commit/45d6a7d51be2ea12a935a94511290cb9670706d9

答案 1 :(得分:1)

我遇到了相同的问题,并按照github所述更新了对文件夹的读写权限,从而解决了该问题。希望对别人有帮助。

答案 2 :(得分:0)

我告诉你什么对我有用:我读了一条错误信息:**警告:session_regenerate_id():会话对象的销毁失败... ** 我做了什么我只是转到指示文本的文件夹,然后删除存储在其中的所有键,然后我解决了问题,这使我退出了会话,但是现在我再次进入和离开就不再有错误

答案 3 :(得分:-3)

尝试在Session.php文件的第300行

之前添加“@”

session.php文件的路径可以是: C:\xampp1\htdocs\advanced\vendor\yiisoft\yii2\web\Session.php

添加@之前的

代码是:

public function regenerateID($deleteOldSession = false)
{
    if ($this->getIsActive()) {

        // add @ to inhibit possible warning due to race condition
        // https://github.com/yiisoft/yii2/pull/1812
        if (YII_DEBUG && !headers_sent()) {

            session_regenerate_id($deleteOldSession);
        } else {

            @session_regenerate_id($deleteOldSession);
        }
    }
}
添加@后的

代码是:

public function regenerateID($deleteOldSession = false)
{
    if ($this->getIsActive()) {

        // add @ to inhibit possible warning due to race condition
        // https://github.com/yiisoft/yii2/pull/1812
        if (YII_DEBUG && !headers_sent()) {
            @session_regenerate_id($deleteOldSession);
        } else {
            @session_regenerate_id($deleteOldSession);
        }
    }
}

答案 4 :(得分:-4)

尝试在session_regenerate_id()之前添加@,如

@session_regenerate_id(true);

我也面临同样的问题,但是当我在session_regenerate_id(true)之前添加@时,它会消失并且系统会相应地工作。

希望这有帮助。