解决php项目中session失效的方法

  • 时间:
  • 浏览:3

啰嗦了那末多,最后还是linus那句话,“talk is cheap,show me the code”。

原文地址http://www.bieryun.com/14009.html

可能性你你这种 项目一开始英文后台也有我一人开发的,之后快一点 就找到了问题 所在。流程为:用户通过js组件上传试卷,在上传试卷的妙招中通过session存储之后 上传的试卷完正信息,如名称、后缀、存入资源表的ID等,上传成功后,再点击页面上的某些选项,如学校、年级、难易度等,最后点击提交,在提交出理 的妙招里,一开始英文便判断之后 上传的session值是与非 存在,不存在便跳到试卷首页。我在此妙招中打印了$_SESSION,那末值,奇怪了,之后 还是好好的。于是我问了下,啥之后 开始英文的,leader说下午快下班时,老师打电话说上传试卷设置答题卡不成功,老跳转。接着又问了下,动服务器环境了么,leader说那末。

既然突然出现了问题 ,那就出理 问题 呗。正好这段时间在看《PHP核心技术与最佳实践》一书,底下就对session和cookie有完正的描述,一起去也加深了我对二者的理解。于是我先打开php的配置文件,找到session相关的配置项,发现session.save_path为/data2/session,我记得之后 也有设置为/data1/session的,为什么会变了。于是我退出来去看看此路径,一开始英文我以为是该目录权限存在问题,之后一看,压根就那末该目录,难怪每个session不要再跨页面。于是新建文件,设置权限,再上传,一切又恢复正常了。

代码看多懂的吧,就不解释了。

写到这,我也想再唠叨下session相关的技术点。session是存储在服务器端的,默认是以文件妙招存储的(session.save_handler = files)。那session是怎样产生的呢?session是通过session_start()函数产生的 ,当此函数运行时,在session存储的目录里生成一另有一个文件和唯一一另有一个与之对应的session id,通过session id还要取出该session文件的数据。可能性每次运行session_start()一定会产生新的seession文件,那末怎样利用到之后 生成session文件呢,只需session_start($session_id),那末便不要再新产生session文件了,而会去读session id对应的session文件。session id在默认情况汇报下也有使用在客户端(浏览器)的cookie来保存session id(在chrome浏览器上按F12键,点击Resources-cookies,还要看多),使用$_COOKIE['PHPSESSID']还要获取。那个PHPSESSID是session id的默认名称,在php.ini里还要通过session.name来设置,在脚本中用session_name()来获取session id的名称。每次浏览器和服务器对话时,浏览器一定会把session id传给服务器的,服务器会妙招传递过来的session id找到相应的session文件获取相应信息进行相关操作。而一旦客户端(浏览器)禁用了cookie,那末服务器端变不要再接收到session id,此时还要显示传递session id了。一种生活妙招:手动通过URL传递session id;隐藏表单传递session id。上述一种生活妙招还要服务端的php环境中session.use_trans_sid 值为 1。

今天下班坐班车,快到站的之后 ,上家公司的leader发了个qq给我,意思是救火,下车后回来在电脑上完正问了下,leader的描述如下

最后总结下吧,一般情况汇报下突然出现跨页面session失效,基本上是上述列出的几点。1、session.save_path有误,如权限存在问题,或是目录不存在;2、服务器php配置中的session.use_trans_sid值为0;3、客户端禁用了cookie。不过我着实第一种生活情况汇报突然出现的频率应该挺高的。