簡體   English   中英

regenerate_session_id銷毀會話信息

[英]regenerate_session_id destroying session information

我有一個需要在特定時間創建新會話ID的應用程序。 現在,這導致用戶注銷,因為$ _SESSION最終為空。

據我了解,regenerate_session_id()應該保留會話信息,而只是更改會話ID(這意味着$ _SESSION ['someVar']將在后續請求中可用。

我發現,$ _ SESSION在后續請求中為空。

我嘗試復制數據:

$session = $_SESSION;
session_regenerate_id();
$_SESSION = $session;

但這沒有幫助。 如果我注釋掉session_regenerate_id(); 隨后的頁面正確加載(填充$ _SESSION數組,並且用戶保持登錄狀態)。

我有一個開發環境,我最近剛剛運行了一個較新版本的PHP(5.5),並且該代碼可以正常運行。 我不知道其他任何區別。

我想念什么? 提前致謝。

session_start();

$_SESSION['name'] = "mike";

session_regenerate_id();

echo $_SESSION['name'];

輸出'mike'

我在服務器上做了一點測試,看來工作正常。

<?php
session_start();
$old = session_id();
$_SESSION['name'] = "mike";
session_regenerate_id();
$new = session_id();
echo $_SESSION['name']."<br/>\n";
echo $old ."<br/>". $new
?>

這是輸出示例:

mike
d9oog3vo55936m3088o25qqe27
m6qq99pp1c80mit8e66ho3hfn3

如您所見,它正在更改會話ID,並按原樣保留會話變量。 也許您的托管服務提供商在php.ini中有一些時髦的設置? 您可能需要調查一下。

或者,這有點麻煩,您是否可以創建一個帶有密鑰的cookie,使其在注銷后立即將其重新登錄,然后刪除該cookie?

經過一整晚的休息后,我發現您可能遇到了一些標題問題。 會話僅在設置它們的同一個域內有效,因此,例如,如果您在www.example.com設置了會話變量,則使用標題重定向到header("location:example.com"); ,則您的會話變量將為空白,因為未為該域設置,而是為www.example.com設置。 我將檢查您的代碼,看看是否是問題所在,正如您所說,它在沙盒中運行正常。

暫無
暫無

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

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