jjzjj

php - ini_set 'session.gc_maxlifetime' 为 1 天

coder 2024-04-10 原文

如果我这样做:

ini_set('session.gc_maxlifetime', 86400);

这是否意味着用户可以将浏览器留在同一页面上(不活动)最多 1 天,而不必担心 session 被垃圾收集和他们被注销?

如果服务器配置不支持这个会发生什么? (它会给我一个错误吗?还是默默地失败?)

默认的垃圾收集时间是 24 分钟,这在我的系统中很容易发生。

垃圾收集是否在 session_start 上运行?

最佳答案

对于像您这样的问题,我倾向于直接查看每个 ini 设置的 PHP 手册页:http://php.net/session.gc_maxlifetime:

session.gc_maxlifetime integer

session.gc_maxlifetime specifies the number of seconds after which data will be seen as 'garbage' and potentially cleaned up. Garbage collection may occur during session start (depending on session.gc_probability and session.gc_divisor).

  • Note: If different scripts have different values of session.gc_maxlifetime but share the same place for storing the session data then the script with the minimum value will be cleaning the data. In this case, use this directive together with session.save_path.

  • Note: If you are using the default file-based session handler, your filesystem must keep track of access times (atime). Windows FAT does not so you will have to come up with another way to handle garbage collecting your session if you are stuck with a FAT filesystem or any other filesystem where atime tracking is not available. Since PHP 4.2.3 it has used mtime (modified date) instead of atime. So, you won't have problems with filesystems where atime tracking is not available.

将其映射到您的各种问题:

  • Does this mean the user can leave there browser on the same page (inactive) for up to 1 day without the worry of the session being garbage collected and them being logged out?

这仅表示 session 未被垃圾回收。如果用户由于某些其他原因(例如 cookie 丢失或某些其他 session ID 携带参数)丢失了 session ID,则无论 session 是否已被垃圾收集,用户都将自己视为已注销。

  • What happens if the server configuration doesn't support this? (Will it give me an error? or just fail silently?)

那是 PHP 配置而不是服务器配置。但是,如果您没有以默认方式使用默认 session 目录将文件放在那里,它不会给您任何错误并静默失败。负责 session 数据垃圾收集是服务器管理的职责。

如果是标准配置但没有足够的文件权限,则会触发错误。

在内部,也可以启用 session 调试,以便您可以获得有关删除了多少 session 文件的消息。

另请参阅此相关问答:

  • The default garbage collection time is 24 minutes which could happen in my system easily.

是的,默认设置是“1440”,代表 1440 秒,即 24 分钟。

您可以在此处的 PHP 源代码中找到它:

它也与 PHP 附带的建议 ini 设置使用的值相同。

另请参阅此相关问答:

  • Does garbage collection run on session_start?

是的。您可以在 session_start 实现的末尾找到它:


那么随着所有这些信息的泛滥,我们应该吸取哪些教训呢? PHP 对 session 数据进行垃圾回收,因为如果启用了 session ,将很容易产生大量数据。使用 session 保存目录的标准设置,它可以很快填满大量文件。我自己经历过这种情况,因为我在没有启动标准垃圾收集的应用程序中存在一些缺陷(我更改了 session 保存路径,因为该站点位于共享主机上并且我自己的垃圾收集没有被正确触发/配置),所以最后我所能做的就是从 shell 访问该目录并让 find 完成真正需要很长时间的工作 - 但它有效。所以手动垃圾收集。

因此,请检查您的垃圾收集设置,并在一两天后验证这些设置是否按预期工作。

除了纯垃圾回收之外,在您的应用程序中独立跟踪 session 生命周期也是明智的。这是通过将 session 创建时间和 session 上次事件时间添加到 session 中来实现的。如果您想允许长时间运行的 session 甚至强制用户在特定时间跨度后重新登录,这将允许您重新生成 session ID。

此外,对于 session 尚未被垃圾收集器删除的情况,这也可以保护您的 session 处理,因为可能没有捕获到它,或者因为它是唯一可用的 session 。由于垃圾收集器在 session 启动后启动的设计问题,垃圾收集器永远不会删除当前 session 。

我希望这能回答您的问题并为您提供一些指导。

关于php - ini_set 'session.gc_maxlifetime' 为 1 天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24337474/

有关php - ini_set 'session.gc_maxlifetime' 为 1 天的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  4. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  5. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  6. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  7. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  8. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  9. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  10. ruby-on-rails - Rails 中的 NoMethodError::MailersController#preview undefined method `activation_token=' for nil:NilClass - 2

    似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai

随机推荐