php 如何设置一个严格控制过期时间的session


Posted in PHP onMay 05, 2017

1.php session 有效期

PHP的session有效期默认是1440秒(24分钟),如果客户端超过24分钟没有刷新,当前session会被回收,失效。

当用户关闭浏览器,会话结束,session也会失效。

可以修改php.inisession.gc_maxlifetime来设置session的生命周期,但并不能保证在超过这一时间后session信息立即会删除。因为GC是按机率启动的,可能在某一个长时间内都没有被启动。那么大量的session在超过session.gc_maxlifetime后仍然有效。

2.session.gc_maxlifetime,session.gc_probability,session.gc_divisor说明

session.gc_maxlifetime = 30 表示当session文件在30秒后没有被访问,则视为过期session,等待GC回收。

GC进程调用的概率是通过session.gc_probability/session.gc_divisor计算得来的,而session.gc_divisor默认是1000,

如果session.gc_probability = 1000,那么GC进程在每次执行session_start()时都会调用,执行回收。

把session.gc_probability/session.gc_divisor的机率提高,会有帮助,但会对性能造成严重影响。

3.严格控制session过期方法

1.使用memcache/Redis来保存session,设置过期时间,因为memcache/redis的回收机制不是按机率的,可以确保session过期后失效。

2.只使用php实现,创建一个session类,在session写入时,把过期时间也写入。读取时,根据过期时间判断是否已过期。

<?php
/**
 * Session控制类
 */
class Session{
  /**
   * 设置session
   * @param String $name  session name
   * @param Mixed $data  session data
   * @param Int  $expire 超时时间(秒)
   */
  public static function set($name, $data, $expire=600){
    $session_data = array();
    $session_data['data'] = $data;
    $session_data['expire'] = time()+$expire;
    $_SESSION[$name] = $session_data;
  }
  /**
   * 读取session
   * @param String $name session name
   * @return Mixed
   */
  public static function get($name){
    if(isset($_SESSION[$name])){
      if($_SESSION[$name]['expire']>time()){
        return $_SESSION[$name]['data'];
      }else{
        self::clear($name);
      }
    }
    return false;
  }
  /**
   * 清除session
   * @param String $name session name
   */
  private static function clear($name){
    unset($_SESSION[$name]);
  }
}
?>

demo:

<?php
session_start();
$data = '123456';
session::set('test', $data, 10);
echo session::get('test'); // 未过期,输出
sleep(10);
echo session::get('test'); // 已过期
?>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
php 进度条实现代码
Mar 10 PHP
mayfish 数据入库验证代码
Apr 30 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
浅析Apache中RewriteCond规则参数的详细介绍
Jun 30 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
php用户注册时常用的检验函数实例总结
Dec 22 PHP
php常用数组函数实例小结
Dec 29 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 PHP
PHP实现文件上传功能实例代码
May 18 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
php 数组元素快速去重
May 05 #PHP
Yii2实现自定义独立验证器的方法
May 05 #PHP
php 查找数组元素提高效率的方法详解
May 05 #PHP
thinkPHP分页功能实例详解
May 05 #PHP
php cli模式下获取参数的方法
May 05 #PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 #PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 #PHP
You might like
PHP面向对象编程快速入门
2006/12/14 PHP
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
微信小程序3D轮播实现代码
2019/09/19 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
《只有一个地球》教学反思
2014/02/14 职场文书
服装采购员岗位职责
2014/03/15 职场文书
机电系毕业生求职信
2014/07/11 职场文书
护理目标管理责任书
2014/07/25 职场文书
2014年新教师工作总结
2014/11/08 职场文书
小学工作总结2015
2015/05/04 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书