簡體   English   中英

警告:session_regenerate_id():會話對象銷毀失敗

[英]Warning: session_regenerate_id(): Session object destruction failed in

通過會話登錄代碼時,我隨機收到以下錯誤; 警告: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。 保存路徑上的權限很好(經過身份驗證的用戶、系統、管理員、用戶都有完全控制權),會話文件被保存在文件夾中。

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

謝謝

我認為您看到警告是因為“session_regenerate_id(true)”嘗試刪除舊會話,但此時可能未寫入會話。 PHP 將在腳本末尾寫入會話文件,同時會話值僅在內存中。 這也是我們在頭部重定向后使用 session_write_close 或 exit 的原因,以便此時會話已經寫入。

也許您可以在嘗試刪除會話之前檢查會話是否可用? 例如: https : //github.com/yiisoft/yii/commit/45d6a7d51be2ea12a935a94511290cb9670706d9

我遇到了同樣的問題,並通過更新文件夾的讀寫權限來解決它,如github此處所述。 希望它可以幫助某人。

我告訴你什么對我有用:我讀到錯誤:**警告:session_regenerate_id():會話對象的銷毀失敗......**我做了什么? 我只需轉到指示文本的文件夾並刪除存儲在那里的所有密鑰,我解決了問題,它使我退出了會話但是現在我再次進入和離開沒有更多錯誤

嘗試在 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);
        }
    }
}

嘗試在 session_regenerate_id() 之前添加 @ 就像

@session_regenerate_id(true);

我也面臨同樣的問題,但是當我在 session_regenerate_id(true) 之前添加 @ 時,它會消失並且系統會相應地工作。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM