如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2023年1月17日

Codeigniter系統異常登出問題 "Session Error" 原因與解決方法

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2023-1-17

最近開發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可能的原因

沒有留言:

張貼留言

歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)