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递归列出所有文件和目录的代码
Sep 10 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 PHP
PHP的swoole扩展安装方法详细教程
May 18 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
ThinkPHP实现分页功能
Apr 28 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 PHP
PHP的imageTtfText()函数深入详解
Mar 03 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
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
Javascript学习笔记2 函数
2010/01/11 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
date.parse在IE和FF中的区别
2010/07/29 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
Angular2中select用法之设置默认值与事件详解
2017/05/07 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
详解python中executemany和序列的使用方法
2017/08/12 Python
python字典DICT类型合并详解
2017/08/17 Python
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
自动化专业个人求职信范文
2013/11/29 职场文书
尊师重教演讲稿
2014/09/04 职场文书
元旦标语大全
2014/10/09 职场文书
2014年煤矿工作总结
2014/11/24 职场文书