【问题标题】:PHP custom session path: will some mechanism delete my session files against my will?PHP 自定义会话路径:某些机制会违背我的意愿删除我的会话文件吗?
【发布时间】:2012-05-10 06:15:43
【问题描述】:

我制作的 PHP 应用程序完全依赖会话文件,这些会话文件会保留很长时间(例如,树周、一个月……)。

因为我的 PHP 应用程序将在共享主机环境中运行,所以我将自定义 session_save_path - 目录放入包含所需会话文件的应用程序的根目录中。

我想知道:是否有任何基于 Linux 系统的 cron 机制,或者我不知道的任何其他机制,如果它们在很长一段时间内未触及,它们会删除我的会话文件,因为它会错误地认为会话文件是不必要的垃圾?

这会完全搞乱我的申请。

我担心主要是因为我在这里找到了一些答案 (http://stackoverflow.com/questions/8693934/how-does-php-know-when-to-delete-a-session)好起来。

【问题讨论】:

  • 会话应该持续,嗯,一个会话,三周听起来比一个会话长得多。您可能更喜欢使用某种数据库来存储更持久的数据。
  • 谢谢。我知道数据库更适合此目的,但我有理由让应用程序独立于数据库。
  • 是的,即使您有自定义路径,php 也会删除旧会话文件。但是,通常您会使用 cookie 而不是会话文件进行长期存储。
  • @Miloshio,如果你不能使用成熟的数据库服务器,你仍然可以使用 SQLite 甚至是好的 ol' 文本文件。要点是你真的不应该使用会话来持久化。它们被明确设计为不会持续存在。

标签: php session cron


【解决方案1】:

我认为您的会话文件可能会被 php 会话垃圾例程删除。

检查这些配置选项并查找有关 php 会话的 gc 的更多信息。

http://php.net/manual/en/session.configuration.php

您需要注意gc-_* 指令。

【讨论】:

  • 谢谢你醉了。您认为即使这些文件位于自定义会话目录路径中,php 会话垃圾例程也可能会删除这些文件?
  • 我的意思是,如果您确定您的会话文件已被删除,那么 gc 很可能对此负责。您还可以设置自定义会话存储,例如 MySQL,您可以在其中轻松跟踪会话数 (SELECT COUNT(*) FROM sessions) 并不时比较这些值。如果要使用文件系统,可以使用以下命令获取文件数:ls -l | wc -l
  • 谢谢。我还没有遇到任何问题,24 小时过去了,会话文件没有受到影响......
  • 好吧,我没有想到函数 touch()。我想如果我在我的会话文件上执行这个函数,在调用可能运行垃圾收集机制的函数(我认为是 session_start)之前,这可以解决问题......
  • 如果您使用的是 debian linux,则有一个位于 /etc/cron.d/php5 的 cron。如果 /var/lib/php5/(和子文件夹)中的会话文件的 mtime 早于过去 24 分钟,此 cron 每 30 分钟检查一次。如果是这样,这些文件将被删除。
猜你喜欢
  • 2018-05-10
  • 1970-01-01
  • 2019-10-02
  • 2011-11-30
  • 1970-01-01
  • 2015-06-07
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多