nginx中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

时间: 2024-08-04 06:15:09

nginx中session跨页面失效问题如何解决的相关文章

nginx中session ticket重用Session提高https性能分析

原创文章:来自nginx中session ticket重用Session提高https性能分析 https会话建立初次使用session ticket的SSL握手流程如下: Client Server ClientHello (empty SessionTicket extension)--------> ServerHello (empty SessionTicket extension) Certificate* ServerKeyExchange* CertificateRequest*

ThinkPHP框架实现session跨域问题的解决方法_php实例

ThinkPHP的session跨域问题很多开发者都遇到过! 其实不管是ThinkPHP还是php本身,在解决session跨域问题的时候都需要设置session.cookie_domain. 在ThinkPHP里,需要修改配置文件conf/config.php 在第一行加上: ini_set('session.cookie_domain', ".domain.com");//跨域访问Session 经过总结,针对session跨域这一问题的解决方法主要有以下几种: 第一种情况:如果你

nginx中unix:/tmp/php-cgi.sock错误解决解决

首先建立/tmp/php-cgi.sock文件,然后将之改所有者改为www-data: #我直接改成nginx的用户,好像必须要属于nginx的用户组才能正常使用未验证 sudo chown www-data /tmp/php-cgi.sock 到nginx.conf,如果你用的是虚拟机,那么就到/etc/nginx/site-available里改相关文件: 修改: # fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/tmp/php-cgi.so

ASP中SESSION无法保存问题的解决办法

处理办法,删除该文件,或清空该文件内容:我的处理是清空后,再设置该文件权限为Everyone拒绝访问.

Nginx中禁止使用IP访问网站的配置实例_nginx

国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问网站,那随便解析一个域名到该IP,访问该域名就可以打开网站了.这是一个极大的风险!Nginx中可以很方便的来解决这个问题,小菜鸟来跟大家一起探讨一下. 国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问网站,那随便解析一个域名到该IP,访问该域名就可以打开网站了.这是一个极大的风险!Nginx中可以很方便的来解决这个问题,小菜鸟来跟大家一起探讨一下. 如下的配置项,可以设置允许使用I

抛开Cookie使用SESSION-PHP中SESSION不能跨页传递问题的解决办法

cookie|session|解决|问题 抛开cookie使用sessionPHP中SESSION不能跨页传递问题的解决办法 在PHP中使用过SESSION的朋友可能会碰到这么一个问题,SESSION变量不能跨页传递.这令我苦恼了好些日子,最终通过查资料思考并解决了这个问题.我认为,出现这个问题的原因有以下几点:1.客户端禁用了cookie2.浏览器出现问题,暂时无法存取cookie3.php.ini中的session.use_trans_sid = 0或者编译时没有打开--enable-tra

iis7中session丢失的解决方法小结_win服务器

问题描述: Windows Server 2008 +IIS +ASP.net +SQLServer2008搭建的内部WEB系统. 用户Session总是丢失,可能是IIS的不稳定性将导致Session频繁丢失. 用的是Session=SQLSEVER,即把Session保存到数据库. 解决方法: 1,在命令行进入如下地址(InstallSqlState.sql文件目录) cd "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" 2,运行如下

Nginx中共享session会话配置方法例子_nginx

Session一般都指时域.在计算机术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间以及如果需要的话,可能还有一定的操作空间. Session一般都指时域.在计算机术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间以及如果需要的话,可能还有一定的操作空间. 通常情况下能把session改成cookie,就能避开session的一些弊端,在从前看的一本J2EE的

如何解决分布式系统中的跨时区问题[实例篇]

关于如何解决分布式系统中的跨时区问题,上一篇详细介绍了解决方案的实现原理,在这一篇中我们通过一个完整的例子来对这个问题进行深入探讨.尽管<原理篇>中介绍了那么多,解决方案的本质就是:在进行服务调用过程中将客户端的时区信息作为上下文传入服务端,并以此作为时间转换的依据.我们首先定一个具体的类型来定义包含时区信息的上下文类型,我们将这个类型起名为ApplicationContext. 一.通过CallContext实现ApplicationContext 在<通过WCF扩展实现Context