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 相关文章推荐
phpMyAdmin 安装配置方法和问题解决
Jun 08 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
Drupal7中常用的数据库操作实例
Mar 02 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
PHP 读取和编写 XML
Nov 19 PHP
php实现通用的从数据库表读取数据到数组的函数实例
Mar 21 PHP
php实现倒计时效果
Dec 19 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 PHP
Laravel SQL语句记录方式(推荐)
May 26 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 PHP
Yii 实现数据加密和解密
Mar 09 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
8个必备的PHP功能实例代码
2013/10/27 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
浅谈json_encode用法
2015/03/05 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
python实现任意位置文件分割的实例
2018/12/14 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
python实现猜数字游戏
2020/03/25 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
学生请假条
2014/04/11 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
办公室禁烟通知
2015/04/23 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫