2015-11-12 239 views
1

我試圖使用AJAX調用更新會話變量,然後重定向並在下一頁獲取該變量。我的問題是,一旦頁面重定向,會話不會更新,直到我刷新。會話不會更新,直到刷新

我認爲這可能是因爲會話是第一件被加載的事實,但我無法找到解決方法。這裏是我的相關代碼:

輸入頁面

$.post('save.php', {data:$input}) 
    .done(function() { 
     window.location.replace('result.php'); 
    } 
); 

save.php

session_start(); 

// make sure previous value has been deleted 
unset($_SESSION['word']); 

$_SESSION['word'] = $_POST['word']; 

result.php

session_start(); 

$data = $_SESSION['word']; 

print_r($data); 

謝謝!

+5

爲什麼要使用ajax,使用post並更新session var然後使用php重定向? – skywalker

+0

@skywalker我剛剛發佈了我的代碼的簡化版本(可能不太聰明) - 我實際上正在嘗試傳遞一個數組,並且在網頁上沒有

元素。最後我用JSON.stringify()和這個[post function](http://stackoverflow.com/a/133997/2839573)來傳遞值。謝謝您的幫助! – user2839573

回答

1

我認爲@skywalker有一個非常好的問題,但如果你想使用Ajax要做得像現在:

在你php文件,其中將它保存session變化

session_start(); 

// make sure previous value has been deleted // <--- not needed 
unset($_SESSION['word']); 

$_SESSION['word'] = $_POST['word']; 

session_write_close(); //<---------- Add this to close the session so that reading from the session will contain the new value. 

要解釋:session存儲在服務器上的文件中。編輯會話時,文件被鎖定以便寫入,但不能讀取。當服務器沒有將所有更改寫入會話文件並且下一個php腳本嘗試讀取會話時,您將獲得「舊」值。要強制服務器將所有更改寫入會話,請在使用下一個腳本閱讀之前先關閉會話進行寫入。