如何刷新/ var / lib / php / session /中的旧会话?

时间:2017-07-14 00:41:29

标签: php session

我最近注意到我在那里有大量的会话--1.3M会话(根据ls -l /var/lib/php/session/ | wc -l确定)。我的每周访问次数只有一位数,所以这看起来很疯狂 - 我假设它以某种方式保存了会话,并且由于某种原因从不冲洗旧会话。

php.ini中是否有控制这些的相关设置?

1 个答案:

答案 0 :(得分:3)

是的,对此的讨论可以是found in the manual here

您希望查看所有session.gc_设置,因为这些变量会影响垃圾收集运行的可能性。

话虽如此,显然有些错误,因为您的会话文件似乎没有被删除。

您需要考虑php.ini文件中的session.gc_maxlifetime设置,因为在文件创建完成后的秒数内,不会删除任何文件。如果你的gc_maxlifetime太长,文件就会累积。

此脚本是一个推荐的面向cron的命令行php脚本,可以每天或每周安装和运行以运行垃圾收集器。我会从那开始,看看会发生什么。

可能存在实际上阻止垃圾收集器删除会话的权限问题,因此从手动运行此程序开始,看看会话文件数量的变化将是一个良好的开端。如果您有php7.1,这是手册中推荐的代码。

<?php
// Note: This script should be executed by the same user of web server process.

// Need active session to initialize session data storage access.
session_start();

// Executes GC immediately
session_gc();

// Clean up session ID created by session_gc()
session_destroy();
?>

应该以类似方式工作的旧版本php的程序将是:

<?php
ini_set('session.gc_probability', '1');
ini_set('session.gc_divisor', '1');
session_start();
session_destroy();
?>

这里的想法是你保证垃圾收集器将通过使该脚本的概率为100%来运行。