gpt4 book ai didi

php - session.gc_maxlifetime 是否指定了自上次更改单个 session 变量以来的最大生命周期?

转载 作者:行者123 更新时间:2023-12-04 18:19:01 27 4
gpt4 key购买 nike

我正在使用基于 Java 的上传结构 http://www.javaatwork.com/java-upload-applet/details.html我试着跑了一夜。

  • 它基本上将所有内容都存储在服务器的硬盘上 (/var/www/private/$userId)
  • 确保数据格式正确
  • 然后将其传递到永久存储 (Amazon S3)。

  • 第 1 步完成后,我运行以下代码:
    if($_SESSION['userId'])
    {//Makes sure that data is well-formed}
    else
    {echo 'you are not logged in';}

    我试着运行了四个小时才找到 you are not logged in打印到屏幕上。

    以下是 cgi php.ini 文件中的相应指令(我使用的是 ubuntu 12.04 和 apache2。)
    session.gc_probability = 0
    session.gc_divisor = 1000
    session.gc_maxlifetime = 14400 //this is 30 hours, which is far greater than the 4 hours it was running
    session.cache_expire = 1800
    session.cookie_lifetime = 0

    这些指令中的大多数都是默认的, session.gc_probability 除外。和 session.gc_maxlifetime .

    我试图解决这个问题,并遇到了 Jeff 的一个非常有用的博客,我从中推断,如果浏览器内的网站出现一段时间不活动,浏览器可能会导致存储在浏览器中的 PHPSESSID cookie 被删除。他建议

    “在浏览器中创建一个后台 JavaScript 进程,定期向服务器发送心跳。例如,每隔 5 或 10 分钟重新生成一个具有定时到期的新 cookie。”
    http://www.codinghorror.com/blog/2008/04/your-session-has-timed-out.html

    所以我决定这样做。
    function myTimeoutFunction()
    {
    $.ajax({
    url: "heartbeat.php",
    success: function() {
    }
    });
    setTimeout(myTimeoutFunction, 15*60*1000);
    }
    myTimeoutFunction();

    心跳.php <?php session_start(); ?>
    我将要测试这个需要大约 4 小时的上传。但是我刚刚阅读了以下内容

    一般来说,您可以说 session.gc_maxlifetime 指定自上次更改 session 数据以来的最大生命周期( 不是 最后一次调用 session_start)

    https://stackoverflow.com/a/1516338/784637

    如果我有 3 个 session 变量, $_SESSION['userId'] $_SESSION['firstName'] $_SESSION['lastName'] ,我需要重置它们在 heartbeat.php 中的所有值吗?
    session_start(); 
    $_SESSION['userId'] = $_SESSION['userId'];
    $_SESSION['firstName'] = $_SESSION['firstName'];
    $_SESSION['lastName'] = $_SESSION['lastName'];

    或者我可以只重置一个值吗
    session_start(); 
    $_SESSION['lastHeartbeat'] = time();

    这样其他三个就不会过期了?

    最佳答案

    PHP session 保持为一个整体; $_SESSION 中的任何更改都会更新更改时间,并通过扩展保留整个 session 。

    关于实际问题:PHP 不应该在达到最大时间之前 GC session ,但这并不意味着 PHP 总是清除它。默认情况下, session 保存在/tmp(或其他)目录中,并且某些 Linux 发行版将具有可能不时清理文件夹的 cron 作业。检查 crons 或其他可能清除独立于 PHP 的 session 的东西。

    关于php - session.gc_maxlifetime 是否指定了自上次更改单个 session 变量以来的最大生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11077296/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com