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自定义函数返回多个值
Nov 26 PHP
PHP MVC模式在网站架构中的实现分析
Mar 04 PHP
PHP下打开URL地址的几种方法小结
May 16 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 PHP
php生成二维码图片方法汇总
Dec 17 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 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
牡丹941资料
2021/03/01 无线电
dedecms中常见问题修改方法总结
2007/03/21 PHP
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
2015年财务部工作总结
2015/04/10 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS