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实现ping
Oct 09 PHP
深思 PHP 数组遍历的差异(array_diff 的实现)
Mar 23 PHP
快速开发一个PHP扩展图文教程
Dec 12 PHP
php pcntl_fork和pcntl_fork 的用法
Apr 13 PHP
php小型企业库存管理系统的设计与实现代码
May 16 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
消息持续发送的完整例子
2006/10/09 PHP
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
php中this关键字用法分析
2016/12/07 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP强制转化的形式整理
2020/05/22 PHP
js 实现菜单上下显示附效果图
2013/11/21 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
JQuery ZTree使用方法详解
2017/01/07 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
python局部赋值的规则
2013/03/07 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
Oracle性能调优原则
2012/05/03 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
医院门卫岗位职责
2013/12/30 职场文书
单位实习证明怎么写
2014/01/17 职场文书
竞聘书格式及范文
2014/03/31 职场文书
2015年司机工作总结
2015/04/23 职场文书
行政处罚告知书
2015/07/01 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
Python图片验证码降噪和8邻域降噪
2021/08/30 Python