php - CodeIgniter 的 ci_sessions 是否需要偶尔清空?

标签 php codeigniter session

我正在使用与数据库相关的 CI session 。所以我们所有的 session 都在我们数据库的这个 ci_sessions 表中,考虑到 session_id 每 5 分钟更改一次,它可以获得很多行。

我们是否需要清空表格,比如说每个月/每周一次?

最佳答案

虽然 @Marc-Audet 所说的是真的,但如果您看一下代码,您会发现这是一种非常糟糕的清理 session 的方法。

构造器每次启动时都会调用_sess_gc函数。所以,基本上每个请求到你的服务器,如果你有它自动加载。

然后,它会生成一个低于 100 的随机数,并查看它是否低于某个值(默认为 5)。如果满足此条件,则它将删除 session 表中 last_activity 值小于当前时间减去 session 到期时间的所有行。

虽然这适用于大多数情况,但技术上有可能(如果世界真的是随机的)随机数生成器不会长时间生成低于 5 的数字,在这种情况下,您的 session 将不会被清理.

此外,如果您将 session 到期时间设置为很长的时间(如果您设置为 0,CI 会将其设置为 2 年),那么这些行无论如何都不会被删除。如果您的网站足够好,可以吸引大量访问者,您的 DBA 很快就会指责 session 表 :)

它适用于大多数情况 - 但我不会将其称为合适的解决方案。他们的 session id 再生真的应该被建立来删除与以前的 ids 相关的记录,垃圾收集真的不应该留给一个随机数——理论上,可能没有像你希望的那样频繁地生成所需的数字.

在我们的例子中,我已经从 session 库中删除了 session 垃圾收集,并且我每天手动处理一次(使用 cron 作业......和合理的 session 过期时间)。这减少了对数据库不必要的命中次数,也不会在数据库中留下大量表。它仍然是一张大 table ,但比以前小了很多。

关于php - CodeIgniter 的 ci_sessions 是否需要偶尔清空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360819/

相关文章:

php - 获取刚刚使用 MySQL 插入的行的自动编号 ID

php - 单击时使用javascript更改输入按钮样式

phpexcel 库在本地主机上工作正常,但在服务器中生成空白的 excel 文件

php - 如何在 codeigniter 中通过代理自动加载移动模板?

asp.net - 使用进程外 session 状态的 ASP.NET 应用程序中的 SQL Server 连接问题

php - 爬取页面的不同语言,这取决于php中的 session

php - 执行 PHP 操作后网站关闭

php - 错误 : localhost redirected you too many times

php - 如何使用 php PDO 查询两个表?

java - 当 session 在 servlet 中过期时自动重定向到登录页面