如何解决session跨页面失效问题

昨天在自己的服务器用session实现了一个登陆的功能,但是session跨页面不能使,着实捉急了一会。下面把解决过程记录下,防止下次遇到同样的问题又抓瞎了。

一般session失效的原因有以下几种:
1、浏览器COOKIE禁用。
2、服务器SESSION目录没有写权限。

先来看下服务器SESSION目录没有写权限的情况吧:

前提:这种情况的前提是你的session.save_handler=files,也就是文件存储session。

有的服务器用memcache存储session,可以看下是不是memcache出了问题。

我遇到的就是这种情况,因为之前我用的apache服务器,所以session目录的用户组自然是apache,后来的某年某月我把服务器换成了Nginx,但是我没有更换session目录的用户组,接着就导致了这个问题。

本来是个简单的问题,但是我却傻逼呵呵的把session目录的文件改成了Nginx目录下,但是没有更改session的权限,所以以为自己遇到了一个神奇的问题。希望大家不要犯这么低级的错误。

下面介绍如何解决这个问题:

获取session目录

一般在php.ini里用session.save_path记录session在服务器的存储目录

session.save_path = "/var/lib/php/session"

更改用户组

chown -R nginx.nginx 'session.save_path'

再来看看浏览器COOIKE禁用的问题:

session是依赖于cookie的,当你访问一个网站的时候,这个网站的服务器会为你生成一个唯一的session_id存储在客户端浏览器,当你在站内跳转页面的时候,浏览器会自动向服务器发送你的唯一session_id,服务器根据你的session_id获取session信息。但是当浏览器禁用cookie时,你的服务器无法获取session_id,服务器就无法获取你的session信息,就会导致session失效的问题。

下面介绍下解决办法:
这种情况下可以设置session.use_trans_sid=1,当我们向服务器发送请求时,URL会自动传送session_id的值。

session.use_trans_sid=1

参考:
浏览器禁用cookie后如何使用session
如果你遇到了别的情况导致session跨页面失效,欢迎补充下。

JackSun

JackSun

I'm a coder.

You may also like...

Leave a Reply

Your email address will not be published.