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 相关文章推荐
一道求$b相对于$a的相对路径的php代码
Aug 08 PHP
php的memcached客户端memcached
Jun 14 PHP
PHP 读取大文件的X行到Y行内容的实现代码
Jun 24 PHP
浅析PHP绘图技术
Jul 03 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
Nov 12 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 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实现ODBC数据分页显示一例
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
2013/06/25 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
利用Python抓取行政区划码的方法
2016/11/28 Python
详解django.contirb.auth-认证
2018/07/16 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
投标担保书范文
2014/04/02 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
市场营销计划书
2015/01/17 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
Python打包为exe详细教程
2021/05/18 Python