【问题标题】:Codeigniter 3 destroy session on browser closeCodeigniter 3 在浏览器关闭时销毁会话
【发布时间】:2018-08-31 13:15:44
【问题描述】:

我知道有很多关于“如何在浏览器关闭时销毁 codeigniter 会话”的问题。但请相信我,在不完美的解决方案上没有任何解决方案,例如在窗口卸载类型上调用 ajax 请求。

有人对此有完美的解决方案吗,我在配置文件中有以下会话配置。

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

【问题讨论】:

  • 不要破坏会话,使它们无效!有关更多信息,请参阅此处的警告:secure.php.net/manual/en/function.session-destroy.php
  • 通过$config['sess_expiration'] = 0;,您已经在浏览器关闭时使会话无效。这不适合你吗?顺便说一句,sess_save_path 必须有一个值,否则整个 CI 会话管理将毫无用处
  • 也就是说,如果您要在浏览器中销毁会话 cookie,则无需这样做,因为 cookie 仅存储对存储在服务器,但会话不会持续
  • 您找到想要的答案了吗?
  • @AlexanderDeSousa 不,我用自定义会话库替换本机 Codeigniter 会话库以使用纯 PHP 会话。

标签: php codeigniter session codeigniter-3


【解决方案1】:

尝试设置 $config['sess_expire_on_close'] = TRUE;

【讨论】:

【解决方案2】:

可悲的是,你不能这样做以你想要的方式。

这是因为服务器不知道关闭浏览器的前端动作。能够捕获此事件的唯一地方是 JavaScript,因此 JS 必须是您的起点。

从那里您可能有几个选择,您已经讨论了最明智的 AJAX 请求。您也可以从 JS 中取消设置会话 cookie,但这意味着您的服务器永远不会知道发生了这种情况,它只会在该会话上看到任何活动,直到它过期。

编辑:还值得注意的是,卸载发生在许多情况下,例如关闭选项卡、点击后退按钮等。因此实现可能会变得复杂并且仍然不可靠。

编辑 2: 当窗口被卸载并且你只有一个连接可能是会议。

【讨论】:

    【解决方案3】:

    设置 $config['sess_expire_on_close'] = TRUE; 我希望它会工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 2015-12-13
      • 1970-01-01
      • 2014-08-15
      • 2012-07-29
      相关资源
      最近更新 更多