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 相关文章推荐
php4的彩蛋
Oct 09 PHP
javascript 小型动画组件与实现代码
Jun 02 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
PHP多个版本的分析解释
Jul 21 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
PHP服务器页面间跳转实现方法
Aug 02 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
必须收藏的23个php实用代码片段
Feb 02 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
php判断电子邮件是否正确方法
Dec 04 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的安全
2006/10/09 PHP
PHP 中的批处理的实现
2007/06/14 PHP
php mail to 配置详解
2014/01/16 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
python进程与线程小结实例分析
2018/11/11 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
下载官网python并安装的步骤详解
2019/10/12 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
工会主席岗位责任制
2014/02/11 职场文书
灰雀教学反思
2014/04/28 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
工程部经理岗位职责
2015/02/02 职场文书
办公室卫生管理制度
2015/08/04 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL