php啟動session失敗錯誤解決辦法
原文地址:http://www.hjaa.net/?p=1149
php啟動session失敗錯誤原因應該是:php.ini中,有關session部分的設定存在錯誤,引發session?cookies無法發送和保持。
排查步驟:
1、將以下文字儲存為phpinfo.php,並上傳到伺服器要可以訪問,比如本站http://www.hjaa.net/phpinfo.php
phpinfo();
?>
重點關注session部分
2、session.cookie_domain設定了A網域名稱,即session.cookie_domain?=?A網域名稱結果導致session?cookies在B網域名稱失效。
解決辦法1:將php.ini中的session.cookie_domain設定為空白,即:session.cookie_domain?=
解決辦法2:session.cookie_domain?=設定成你使用的網域名稱
3、php.ini中,session.cookie_path設定過於嚴格。比如設定為:session.cookie_path?=?/hjaa/也就是說只允許根網域名稱下面的hjaa目錄和子目錄才能使用session(更確切來講,如果session.cookie_domain設定了A網域名稱,則表示A網域名稱下的hjaa目錄和子目錄才允許使用session)
解決辦法:將php.ini中的session.cookie_path設定為“/”(不含雙引號)或者你認為的更加寬鬆的安全設定,比如:?session.cookie_path?=?/
4、php.ini中,將session.cookie_path和session.save_path兩者搞混,以為session.cookie_path是表示session臨時檔案儲存體的路徑。但實際上session.cookie_path是表示session生效的網站域,和伺服器的檔案許可權無關;session.save_path才是設定session臨時檔案儲存體的路徑。比如將session.cookie_path設定為:session.cookie_path?=?C:/WINDOWS/TEMP從而引發故障。
5、session.save_path設定的目錄沒有寫入權限;或者設定不正確(比如設定的檔案夾根本不存在)。請注意:如果為空白,則表示使用預設的系統臨時檔案夾路徑。windows一般為“%SystemRoot%\TEMP”,unix一般為“/tmp”
解決辦法:
(1)、如果session.save_path不留空,請確認該設定值對應的確實是一個檔案夾、並且該檔案夾存在。如果確實不知道如何設定,請注釋此設定、或者改為空白值,讓php使用預設設定。
(2)、在對應目錄中,給予相應使用者的寫入權限比如對於IIS,應給予Internet來賓賬戶的寫入權限。
6、當session.auto_start = on時,執行 session_start() 將產生新的 session_idsession.auto_start = on 的優點在於,任何時候都不會因忘記執行 session_start() 或 session_start() 在程式裡的位置不對,而導致錯誤缺點在於,如果你使用的是第三方代碼,則必須刪去其中的全部 session_start() 。否則將不能得到正確的結果
解決辦法:
(1)session.auto_start = Off
(2)把程式中的session_start();去掉