php 如何设置一个严格控制过期时间的session

 更新时间:2017年05月05日 10:22:01   作者:傲雪星枫  
本篇文章主要介绍了php设置一个严格控制过期时间的session的方法,具有很好的参考价值。下面跟着小编一起来看下吧

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正则表达式笔记与实例详解

    这篇文章主要介绍了PHP正则表达式,结合实例形式详细说明了php正则表达式概念、原理、常用函数及相关操作注意事项,需要的朋友可以参考下
    2019-05-05
  • php中实现进程锁与多进程的方法

    php中实现进程锁与多进程的方法

    这篇文章给大家介绍了单进程的情况的进程锁实现、进程锁实现多进程、进程锁在yii2中的实现以及杀死进程的命令,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • 实例解析php的数据类型

    实例解析php的数据类型

    在本篇文章中我们给大家分享了关于php的数据类型相关知识点内容,有需要的朋友们参考学习下。
    2018-10-10
  • 关于JSON以及JSON在PHP中的应用技巧

    关于JSON以及JSON在PHP中的应用技巧

    这篇文章主要介绍了关于JSON以及JSON在PHP中的应用技巧。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • PHP的explode和implode的使用说明

    PHP的explode和implode的使用说明

    下里说道php中的explode 和implode的用法,芭蕾舞鞋,盼望对于友朋们有所辅助!
    2011-07-07
  • Laravel 5.3 学习笔记之 错误&日志

    Laravel 5.3 学习笔记之 错误&日志

    这篇文章主要介绍了Laravel 5.3 学习笔记之 错误&日志的相关资料,需要的朋友可以参考下
    2016-08-08
  • php+mysql+jquery实现日历签到功能

    php+mysql+jquery实现日历签到功能

    本文主要介绍了php+mysql+jquery实现日历签到功能的过程与步骤,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • PHP数组传递是值传递而非引用传递概念纠正

    PHP数组传递是值传递而非引用传递概念纠正

    在调用函数时通过将PHP数组作为实参赋给形参,在函数中修改,并不会影响到数组本身,说明此过程中的传递为值传递,数组变量并非是指向此数组本身的引用,感兴趣的朋友可以了解下,或许对你有所帮助
    2013-01-01
  • PHP获取当前文件的父目录方法汇总

    PHP获取当前文件的父目录方法汇总

    本文给大家汇总介绍了使用PHP获取当前文件所在目录的父目录的路径的2种方法,并附上php获取路径和目录的相关函数,有需要的小伙伴可以参考下
    2016-07-07
  • php中设置多级目录session的问题

    php中设置多级目录session的问题

    php默认会把session保存在 /tmp 下,但是当session文件过多时会对性能造成很大影响,设置分级目录是个好办法
    2011-08-08

最新评论