【问题标题】:Zend - New Session every minuteZend - 每分钟都有新的会话
【发布时间】:2014-03-13 14:37:15
【问题描述】:

我正在使用 Zend Framework for PHP 并使用 Zend_Session 模块处理会话。我注意到创建了大量会话文件,尽管我几乎是唯一一个在开发过程中使用它的人。目前有两个 Zend 站点在同一台服务器上运行,因此我决定将会话文件位置临时更改为另一个目录,以便仅查看我的站点创建的文件。

我注意到,无论我做什么,每分钟都会创建一个新的会话文件。即使我注销或关闭浏览器,仍然总是每分钟创建一个,目前,总是在一分钟后的 11 秒。当我浏览我的网站并使用功能时,会创建 1 或 2 个其他会话文件,这是正常的。

在我更改会话文件的位置之前,有时会话文件的数量几乎每隔几秒就会增加 5 个,从总共 200 个会话文件增加到有时大约 3000 个。我不知道这是否是 Zend 的正常行为,但我觉得很奇怪。

如果有人可以提供帮助,将不胜感激。谢谢!

编辑

这是我的 application.ini 文件。注释掉的行是我临时更改默认位置以仅查看我的应用程序中的会话的操作。

[production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
phpSettings.date.timezone = "America/Montreal"
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.params.displayExceptions = 1
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.layout.layoutpath = APPLICATION_PATH "/layouts/scripts/"
resources.view.helperPath.App_View_Helper_ = APPLICATION_PATH "/views/helpers"
;resources.session.save_path = APPLICATION_PATH "/tmp/TestSessions/"

appnamespace = "Application"
autoloaderNamespaces[] = "HTMLPurifier"
autoloaderNamespaces[] = "ZC"
autoloaderNamespaces[] = "ZendX"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1 

编辑 2

我可以访问“access.log”文件,我发现了这个:

127.0.0.1 - - [13/Mar/2014:15:08:12 -0400] "GET / HTTP/1.1" 200 6356 "-" "-"
127.0.0.1 - - [13/Mar/2014:15:09:12 -0400] "GET / HTTP/1.1" 200 6356 "-" "-"
127.0.0.1 - - [13/Mar/2014:15:10:12 -0400] "GET / HTTP/1.1" 200 6356 "-" "-"
127.0.0.1 - - [13/Mar/2014:15:11:11 -0400] "GET / HTTP/1.1" 200 6356 "-" "-"
127.0.0.1 - - [13/Mar/2014:15:12:11 -0400] "GET / HTTP/1.1" 200 6356 "-" "-"
127.0.0.1 - - [13/Mar/2014:15:13:12 -0400] "GET / HTTP/1.1" 200 6356 "-" "-"
127.0.0.1 - - [13/Mar/2014:15:14:12 -0400] "GET / HTTP/1.1" 200 6356 "-" "-"

显然它从去年 11 月就开始了。我在文件中进行了搜索,自 11 月以来,已被 127.0.0.1 请求超过 17 万次。它被调用的时间会随着时间的推移而略有变化,但总是每分钟一次。 (我还看到了包括我自己在内的其他使用该网站的人的请求。)

【问题讨论】:

  • @doydoy44 我编辑了我的原始问题以包含我的 application.ini 文件。
  • 检查您的访问日志以查看谁/什么在访问您的应用程序以及在何处访问。也许有一个 cron 作业正在运行,或者正在加载您的页面的其他进程。只有在访问您的应用程序时才会创建会话,并且只有在访问您的站点的任何客户端不发送会话 cookie 时才会创建新会话,因此每个请求都会启动一个新会话。
  • @drew010 我正在等待我的同事回来,他具有 root 访问权限,并且能够检查访问日志。在那之前,我做了更多的测试,看来你可能正在做一些事情。仍在试图弄清楚是什么以及为什么..
  • 再次编辑我的原始问题以包含我的“access.log”文件的一部分。
  • 因为它来自 127.0.0.1 它在本地服务器上。检查 root 和任何其他用户的 cron 选项卡以查看是否有任何内容,或者查看正在运行的进程以确定是否有某种实用程序试图访问本地服务器并查看它是启动还是关闭。我个人并不知道可能会自动设置为每 60 秒访问一次 localhost 的东西。您可能会暂时更改 http 服务器以记录用户代理,因为这可能会给您额外的提示。无论哪种方式,该实用程序都不会跟踪 cookie,这就是为什么有这么多会话

标签: php session zend-framework


【解决方案1】:

试试看:
在您的应用程序中,添加一个目录APPLICATION_PATH "/../tmp"

在生产中添加:

resources.session.use_cookies = true
resources.session.use_only_cookies = true
resources.session.use_trans_sid = off
resources.session.strict = off
resources.session.remember_me_seconds = 0
resources.session.name = "YourNameSession"
resources.session.gc_divisor = 1000
resources.session.gc_maxlifetime = 600
resources.session.gc_probability = 1
resources.session.save_path = APPLICATION_PATH "/../tmp"

添加开发:

resources.session.remember_me_seconds = 0
resources.session.gc_divisor = 10
resources.session.gc_maxlifetime = 8600
resources.session.gc_probability = 1

我不是会话专家。 如果此示例解决了您的问题,请在 Google 上研究这些参数的解释并进行调整。

【讨论】:

  • 谢谢doydoy44,我试过你说的,但无论如何它仍然每分钟创建一次会话。但是使用您给我的内容,我更改了值并使其垃圾收集器运行 100% 的时间,并将 maxlife 设置为 59 秒。通过这样做,我注意到@drew010 所说的实际上可能是原因。当新会话每分钟出现一次时,垃圾收集器就会关闭,这意味着确实似乎每分钟都在请求我的页面。仍在试图弄清楚是什么以及为什么..
  • @Brendan 感谢您的回归。我也同意draw010。如果我有其他想法,我会提出。祝你好运。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
相关资源
最近更新 更多