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

发布时间 - 2026-01-11 00:59:06    点击率:

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 session 过期设置  # php session 过期时间  # php session 过期  # 这一  # 会有  # 也会  # 已过期  # 时间内  # 会对  # 并不能  # 得来  # 创建一个  # 严格控制  # 关闭浏览器  # 客户端  # 判断是否  # 在某一  # 期后  # gc_divisor  # gc_probability  # memcache  # Redis  # session_start 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在橙子建站中快速调整背景颜色?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel如何处理CORS跨域请求?(配置示例)  想要更高端的建设网站,这些原则一定要坚持!  javascript中的try catch异常捕获机制用法分析  如何确保西部建站助手FTP传输的安全性?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  如何在宝塔面板中创建新站点?  Thinkphp 中 distinct 的用法解析  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  大学网站设计制作软件有哪些,如何将网站制作成自己app?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  SQL查询语句优化的实用方法总结  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  JS弹性运动实现方法分析  香港服务器选型指南:免备案配置与高效建站方案解析  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  如何在阿里云服务器自主搭建网站?  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何撰写建站申请书?关键要点有哪些?  常州企业网站制作公司,全国继续教育网怎么登录?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  高防服务器租用如何选择配置与防御等级?  java中使用zxing批量生成二维码立牌  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何在不使用负向后查找的情况下匹配特定条件前的换行符  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  手机网站制作与建设方案,手机网站如何建设?  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  简历没回改:利用AI润色让你的文字更专业  如何在建站主机中优化服务器配置?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  桂林网站制作公司有哪些,桂林马拉松怎么报名?  轻松掌握MySQL函数中的last_insert_id()  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Android GridView 滑动条设置一直显示状态(推荐)  浅析上传头像示例及其注意事项  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  如何在自有机房高效搭建专业网站?