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

2020年1月31日

PHP-Codeigniter系統異常登出問題(使用者登入資訊消失)與解決方法

作者: Fred F.M. Wang (FW知識瑣記) 日期:20200131

最近開發PHP+Codeigniter架構的網站發生奇怪的問題。

其中一段程式碼 :
$this->session->set_userdata("message",$msg);
redirect($prev_page);

上述程式碼執行到redirect(重導)到另一個網頁,就發現登入者自動被登出。

經過一番測試,終於發現問題在哪裡了。

我系統的設計是 : 
1. 用Session儲存使用者登入的資訊(如下列),系統各個頁面會根據此登入資訊判斷是否處於登入狀態。
$this->session->set_userdata("username",$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編碼格式就不會有問題了。

 -- Fred F.M. Wang

參考 :  網路上其他類似的問題與Session data lost可能的原因






沒有留言:

張貼留言

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