PHP中的session永不过期的解决思路及实现方法分享


Posted in PHP onApril 20, 2011

我们前期开发了一个只有公司客服人员才能使用的系统——有限的几个客服人员。就是这有限的几个客服人员前几天突然就提出这样的问题:我们每隔很短一段时间 (半个小时不操作页面),正着急解决客户问题的时候,系统却提示需要登录,耽误了客户的时间…… 这很不爽!

客户就是上帝,唯一的上帝。于是上峰要求我们能够实现PHP中的session永不过期,除非我们的客服人员人为的让他过期了。出于安全性的考虑我很不理解这种永不过期的行为;出于懒惰的原因我真的不想修改以前的程序。但是没有办法,我依然需要改。

不修改程序是最好的方法了,因为如果修改程序,测试部一定非常郁闷像我一样,那么只能修改系统环境配置,其实很 简单,打开php.ini设置文件,修改三行如下:

1、session.use_cookies

把这个的值设置为1,利用cookie来传递sessionid

2、session.cookie_lifetime

这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以PHP的 session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧,999999999怎么样,可以的!就这样。

3、session.gc_maxlifetime

这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除! 那么我们也把它设置为99999999。

就这样一切ok了,当然你不相信的话就测试一下看看——设置一个session值过个10天半个月的回来看看,如果你的电脑没有断电或者宕机,你仍 然可以看见这个sessionid。

当然也可能你没有控制服务器的权限并不能像我一样幸运的可以修改php.ini设置,一切依靠我们自己也是有办法的,当然就必须利用到客户端存储 cookie了,吧得到的sessionID存储到客户端的cookie里面,设置这个cookie的值,然后把这个值传递给session_id()这 个函数,具体做法如下:

<?php 
session_start(); // 启动Session 
$_SESSION['count']; // 注册Session变量Count 
isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID = session_id(); 
// 如果设置了$PHPSESSID,就将SessionID赋值为$PHPSESSID,否则生成SessionID 
$_SESSION['count']++; // 变量count加1 
setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 储存SessionID到Cookie中 
echo $count; // 显示Session变量count的值 
?>

如果很久以后(多久?你自己看吧)你回来刷新这个页面,输出的数字比你走的时候大了1那就对了!如果大了很多,估计是谁动你电脑了,这次测试就不准 确了,呵呵……重新出去一会儿吧!

注意:在setcookie一行中的'PHPSESSID'并不是一定的,如果你遇到有个患有修改狂疾病的网管员,他可能对其做了 修改,最好的方法是用phpinfo()这个函数看看,确认一下session.name一项的值,比较科学。

PHP 相关文章推荐
在PHP中使用Sockets 从Usenet中获取文件
Jan 10 PHP
PHP clearstatcache()函数详解
Mar 02 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
php文件上传的简单实例
Oct 19 PHP
PHP四种基本排序算法示例
Apr 09 PHP
php常用表单验证类用法实例
Jun 18 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
Nginx下ThinkPHP5的配置方法详解
Aug 01 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
PHP 并发场景的几种解决方案
Jun 14 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 #PHP
PHP session有效期session.gc_maxlifetime
Apr 20 #PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 #PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 #PHP
php中显示数组与对象的实现代码
Apr 18 #PHP
PHP的变量总结 新手推荐
Apr 18 #PHP
写php分页时出现的Fatal error的解决方法
Apr 18 #PHP
You might like
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
PHP验证码函数代码(简单实用)
2013/09/29 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
python使用PyQt5的简单方法
2019/02/27 Python
python动态视频下载器的实现方法
2019/09/16 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
2014年应急管理工作总结
2014/11/26 职场文书
Kubernetes控制节点的部署
2022/04/01 Servers
GO中sync包自由控制并发示例详解
2022/08/05 Golang