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 相关文章推荐
如何开发一个虚拟域名系统
Oct 09 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
推荐几个开源的微信开发项目
Dec 28 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
php版微信公众号自定义分享内容实现方法
Sep 22 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
swoole锁的机制代码实例讲解
Mar 04 PHP
详解PHP Swoole与TCP三次握手
May 27 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
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
解密效果
2006/06/23 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
jquery实现图片轮播器
2017/05/23 jQuery
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
Python实现Restful API的例子
2019/08/31 Python
python 实现dict转json并保存文件
2019/12/05 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
银行存款证明样本
2014/01/17 职场文书
工作违纪检讨书
2014/02/17 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
python中如何对多变量连续赋值
2021/06/03 Python