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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章