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中数据的批量导入(csv文件)
Oct 09 PHP
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
实用函数4
Nov 08 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
深入PHP数据缓存的使用说明
May 10 PHP
定义php常量的详解
Jun 09 PHP
PHP获取php,mysql,apche的版本信息示例代码
Jan 16 PHP
PHP中file_exists使用中遇到的问题小结
Apr 05 PHP
php处理json格式数据经典案例总结
May 19 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
老生常谈PHP位运算的用途
Mar 12 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生成Flash动画的实现代码
2010/03/12 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
jQuery选择器源码解读(二):select方法
2015/03/31 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
Selenium的使用详解
2018/10/19 Python
python版大富翁源代码分享
2018/11/19 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
python suds访问webservice服务实现
2020/06/26 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
印度低票价航空公司:GoAir
2017/10/11 全球购物
What is view? why do we have view?
2012/06/22 面试题
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
初中数学教学反思
2014/01/16 职场文书
大型演出策划方案
2014/05/28 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
西岭雪山导游词
2015/02/06 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python