最近開發PHP+Codeigniter架構的網站發生奇怪的問題 :
程式碼 :
$this->session->set_userdata("message",$msg);
redirect($prev_page);
上述程式碼執行要redirect(重導)到另一個網頁,卻發生登入者自動被登出。
經過一番測試,終於發現問題在哪裡了。
我系統的設計是 :
1. 用Session儲存使用者登入的資訊,系統各個頁面會根據此登入資訊判斷是否處於登入狀態。 $this->session->set_userdata("username",$username);
***** 顯然上面的問題是Session中使用者登入資訊已經消失了。*****
2. 用Session儲存訊息,如上面的$this->session->;set_userdata("message",$msg); 重導到另一個網頁時,再讀出此資料顯示在頁面上,如$message = $this->session->userdata("message");。
原因一 : 與預設編碼不同。
$this->session->set_userdata("message",$msg); 這行程式的$msg變數中包含Big5中文編碼的文字,
而Codeigniter系統設定application/config/config.php中預設編碼為UTF-8
$config['charset'] = "UTF-8";
內容與預設編碼不同,造成Session資料的消失。
解決方法 :,只要將上面$msg轉換為UTF-8編碼格式就不會有問題了。
原因二 : 也有可能是設定的內容太長
解決方法 : 縮短訊息內容長度就不會發生了。(或加大session容量,需要其他設定)
參考 : 網路上其他類似的問題與Session data lost可能的原因
沒有留言:
張貼留言
歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)