用户登录Session过期配置

最近登录后台写东西发现,长时间停留在一个页面写文章,由于登录用户会话过期,需要重新登录,然后写的内容就被强制清空了。导致我写的东西白写,随即检查关于用户登录会话的设置。

首先查询php的相关配置

php -i | grep session

微信图片_20251119115144.png

通过查询我发现PHP中的session有效期默认是1440秒(24分钟)也就是说,客户端超过24分钟没有刷新,当前session就会失效。简单粗暴的设置就是直接修改php.ini延长过期时间。但是我服务器里面还有其他的站点,不需要那么长的会话时间会导致安全风险。而我这个网站并没有单独配置session。

首先在config配置文件中增加

$config['session'] = [
    'admin_lifetime' => 7200, // 管理员Session过期时间(秒)
    'user_lifetime' => 86400, // 普通用户Session过期时间(秒)
    'remember_lifetime' => 7*24*60*60, // 记住登录过期时间(秒)
    'secure' => true, // 是否使用安全Cookie
    'httponly' => true // 是否设置HttpOnly
];

在登录文件中增加

// 应用Session配置
if (isset($config['session'])) {
    // 设置管理员Session过期时间
    ini_set('session.gc_maxlifetime', $config['session']['admin_lifetime']);
    session_set_cookie_params([
        'lifetime' => $config['session']['admin_lifetime'],
        'path' => '/',
        'domain' => '',
        'secure' => $config['session']['secure'],
        'httponly' => $config['session']['httponly']
    ]);
    // 设置会话名称
    session_name($config['security']['session_name']);
}

// 启动会话
session_start();

清除浏览器缓存和Cookie后重新登录后台,新的Session过期时间设置将生效,登录后台后,可以等待120分钟,刷新页面如果仍保持登录状态,则说明配置生效。

另一种简单的写法,直接在登录页login增加

// 设置管理员Session过期时间为120分钟(7200秒)
ini_set('session.gc_maxlifetime', 7200); //设置服务器端Session数据保存的最大时间为120分钟
session_set_cookie_params(7200);  //设置Session Cookie的过期时间也为120分钟
ini_set('session.cookie_httponly', 1); //增强安全性,防止客户端JavaScript访问Cookie
ini_set('session.use_only_cookies', 1); //仅使用Cookie存储会话ID,提高安全性

而且我还发现一个session的妙用,那就是对当前页面内容的暂存

步骤:

‌启动Session‌:在需要保存页面的最顶部调用session_start()。

‌保存数据‌:将文章内容保存到Session中。

‌读取数据‌:在需要显示暂存内容的地方,从Session中读取数据。

<?php
session_start();

// 保存数据到Session
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $_SESSION['draft'] = $_POST['content'];
}

// 读取数据从Session
$content = isset($_SESSION['draft']) ? $_SESSION['draft'] : '';
?>

<form method="post">
    <textarea name="content"><?php echo htmlspecialchars($content); ?></textarea>
    <button type="submit">保存并继续编辑</button>
</form>

这样再也不用担心出现写的内容由于重新登录被清理的尴尬情况。


发送评论 (0条评论)
加载信息中...