温馨提示×

Ubuntu怎样设置PHP会话时间

小樊
40
2026-09-04 13:36:34
栏目: 编程语言

在 Ubuntu 下设置 PHP 会话(Session)时间,本质就是修改 PHP 的 session.gc_maxlifetime 以及相关的超时配置。下面按常见场景说明。


一、核心配置项说明

PHP 会话时间主要由以下参数控制(php.ini 中):

session.gc_maxlifetime = 1440
  • 单位:
  • 默认值:1440(24 分钟)
  • 含义:会话文件在服务器上最多保留多久

⚠️ 注意:
浏览器端 Cookie 失效时间服务器端 Session 存活时间 是两个概念。


二、修改 PHP 会话时间(最常见)

1️⃣ 找到 php.ini 文件

php --ini

常见路径:

  • /etc/php/8.1/apache2/php.ini(Apache)
  • /etc/php/8.1/cli/php.ini(命令行)
  • /etc/php/8.1/fpm/php.ini(Nginx + PHP-FPM)

2️⃣ 修改以下参数

session.gc_maxlifetime = 3600
session.cookie_lifetime = 3600

示例:设置 1 小时

参数 说明
session.gc_maxlifetime 服务端 Session 存活时间
session.cookie_lifetime 浏览器 Cookie 存活时间(0 = 浏览器关闭失效)

3️⃣ 重启服务

Apache:

sudo systemctl restart apache2

Nginx + PHP-FPM:

sudo systemctl restart php8.1-fpm
sudo systemctl restart nginx

三、在代码中动态设置(不推荐长期使用)

ini_set('session.gc_maxlifetime', 3600);
ini_set('session.cookie_lifetime', 3600);
session_start();

⚠️ 必须 session_start() 之前 设置


四、保持用户“一直登录”的常见做法

方案 1:延长会话时间

session.gc_maxlifetime = 1209600   ; 14 天
session.cookie_lifetime = 1209600

方案 2:记住我(推荐)

  • Session 只存用户 ID
  • 用数据库 / Redis 存 token
  • Cookie 存 token

五、使用 Redis 存储 Session(生产推荐)

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

Redis 的 TTL 可精确控制会话时间。


六、常见问题

❓ 改了不生效?

  • 改错 php.ini(CLI / FPM / Apache 不同)
  • 没重启服务
  • 框架(Laravel / ThinkPHP)有自己 Session 配置

❓ 用户很快就掉线?

  • gc_probabilitygc_divisor 触发垃圾回收
  • 被系统定时任务清理 /var/lib/php/sessions

如果你告诉我:

  • 用的是 Apache 还是 Nginx
  • PHP 版本
  • 是否用框架(Laravel / ThinkPHP 等)

我可以给你精确配置命令

0