【问题标题】:PHP sessions for longer period较长时间的 PHP 会话
【发布时间】:2019-04-08 12:26:42
【问题描述】:

尝试将 PHP 会话保持 12 小时。

<?php

#required files

ini_set('session.cookie_lifetime', 60 * 60 * 12);
ini_set('session.gc-maxlifetime', 60 * 60 * 12 );
session_start();
$_SESSION['site_type'] = "2";

#more codes
?>

但会议只有几分钟。


记住:会话应该是活动的,即使

  • 标签已关闭
  • 浏览器已关闭
  • 浏览器从最近选项卡中清除(在移动浏览器中打开时)

【问题讨论】:

  • 你想通过会话实现什么可以通过 cookie 完成。
  • 任何成功??? ?

标签: php session cookies session-cookies


【解决方案1】:

您可以使用 Cookies 通过将会话数组保存在 cookie 中并在页面加载时检索它或将会话数据保存在服务器上的数据库中并为其分配密钥并在 Cookie 中使用该密钥来实现此目的

【讨论】:

    【解决方案2】:

    session.gc-maxlifetime 总是高于cookie_lifetime

    使用like后:

    ini_set('session.cookie_lifetime', 43200); // 43200 == 12 hours
    ini_set('session.gc-maxlifetime', 100000);
    

    更改后,您可以使用以下方法检查值:

    echo phpinfo(); // search both values
    

    旁注:

    使用脚本更改配置值总是有问题的,我建议您将 PHP.ini 文件中的值更改为:

    ; 12 hour session cookie
    session.cookie_lifetime = 43200
    session.gc_maxlifetime = 100000 
    

    PHP.ini 中,

    session.cookie_lifetime 始终设置为 0,这意味着会话在浏览器关闭时被破坏。

    session.gc_maxlifetime 是以秒为单位的生命周期,默认值:1440 = 24 minutes

    【讨论】:

    • 我运行了我的代码 + echo phpinfo();;结果:session.cookie_lifetime --> 43200 & session.gc_maxlifetime -->1440
    • 分享结果@Bacha,可能GC值保持不变,也许,分享结果
    • @Bacha:是的,为此我建议你从 php.ini 更改它,
    • 这意味着12小时会话cookie设置正确,那么12小时也不会长...
    • 从 php.ini 更改它的任何其他替代方法?
    【解决方案3】:

    如果您不能使用 ini_set 更改会话持续时间,那么您可能会考虑另一种想法,如果您可以运行 PHP 版本 7 或更高版本,则可以使用此approach

      if (session_status() == PHP_SESSION_NONE) {
        if (version_compare(PHP_VERSION, '7.0.0') >= 0) {
          session_start(['cookie_lifetime' => 43200,]);
        } else {
          session_start();
        }
      }
    

    这样,会话仅在 12 小时后过期。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多