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 相关文章推荐
配置支持SSI
Nov 25 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
May 02 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
php5.5新数组函数array_column使用
Jul 08 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 01 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 Global定义全局变量使用说明
2013/08/15 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
C语言笔试集
2012/07/24 面试题
如何做好总经理助理
2013/11/12 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
博士生求职信
2014/07/06 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript