apache虛擬主機配置錯誤導致網站不能正常使用session

       暑假的時候做了一個網站,前陣子將網站搬遷到學校的主服務器上。這個服務器上部署了很多網站,都是通過配置虛擬主機的方式進行訪問。開始看起來正常,頁面什麼的都能正常顯示,當我打開後臺登錄頁面進行登錄時,奇怪的現象發生了:驗證碼老是驗證錯誤!

       這個網站是用一個CMS模板做的,前前後後已經拿來做了好幾個網站了,由於這個CMS版本較老,存在部分兼容性問題,所以我就想會不會是由於這個服務器上的php版本不同導致的呢?

       於是我查看了生成驗證碼的那段PHP代碼,翻來覆去地檢查,就是沒發現什麼問題,不存在兼容性問題。這時我把目光放到了session上,做過網站的人都知道,驗證碼基本上都是通過session來驗證的,生成驗證碼時註冊一個全局的$_SESSION變量,然後在用戶提交表單時通過檢查用戶輸入的驗證碼是否和這個全局變量匹配來判斷驗證碼正誤。我看到登錄頁面代碼裏是通過session_register方式註冊session的,在php5中這種方式已經不使用了,會不會是這裏的問題呢?於是我修改了註冊session的方式,直接用$_SESSION['變量名']=‘XXX’的方式註冊。修改代碼後我滿心歡喜地認爲問題應該搞定了,刷新頁面,悲了個劇,還是彈出了個“驗證碼錯誤!”的對話框!

       然後我又上網查找關於session的資料,照着網上的操作來,還是不行。正糾結着,就打開php.ini文件看看跟session有關的配置,發現沒有配置session.save_path項,php.ini文件不能隨便更改,我也沒有權限,又上網搜尋了一番,發現可以在php頁面自己設置session的保存路徑,只需要在session_start()函數前使用session_save_path()函數進行配置即可。於是在登錄頁面添加了這段代碼,把session設置成保存在自己的網站根目錄下一個文件夾中,修改好保存後再刷新頁面,問題依舊!而且在那個文件夾中也根本找不到session文件。

       沒辦法,繼續百度吧。這時一篇帖子裏提到了phpinfo(),這個函數基本能看到整個服務器的所有配置。當時也沒有多大期望,想看看服務器配置也好,便在頁面添加了這個函數,還好php.ini沒有屏蔽這個函數,服務器配置順利展現在了我的面前。

       一路往下翻,找到session配置那塊,突然看到session.save_path這個配置的local_value居然是有值的(一個指向我這個網站根目錄下的一個文件夾的路徑)!我奇怪了,php.ini裏明明沒有配置的呀,這怎麼會來的?再細看,發覺不對 了,這個路徑中關閉網站根目錄文件夾名字跟實際文件夾名字不符合,也就是說這個路徑是一個錯誤的,不存在的路徑!難怪session總是無法驗證,原來註冊session變量後保存不了,在匹配時獲取不到也就無法匹配了!但是爲什麼會有這個路徑呢?我又上網 一查,發現原來在配置虛擬主機時可以配置session項。

       想到這裏,解決問題就很簡單了,找到這個服務器的老師,打開httpd.conf文件,找到我這個網站的虛擬主機配置,一看,session路徑呈現在我眼前。趕緊修改路徑爲正確的值然後重啓Apache,打開網站後臺,輸入賬號信息,順利登錄!

 

發佈了35 篇原創文章 · 獲贊 12 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章