我知道有很多关于"如何在浏览器关闭时销毁代码点火器会话"的问题。但是相信我,没有解决方案适用于不完美的解决方案,例如在窗口卸载类型上调用 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;
尝试设置 $config['sess_expire_on_close'] = TRUE;
可悲的是,答案是,你不能按照你想要的方式做到这一点。
这是因为服务器不知道关闭浏览器的前端操作。唯一能够捕获此事件的地方是在 JavaScript 中,因此 JS 必须是您的起点。
从那里你可能有几个选择,你已经讨论了一个最明智的AJAX请求。您也可以从JS中取消设置会话cookie,但这意味着您的服务器永远不会知道发生了,它只会在该会话上看到更多活动,直到它过期。
编辑:还值得注意的是,卸载在许多情况下发生,关闭选项卡,点击后退按钮等。因此,实现可能会变得复杂并且仍然不可靠。
编辑 2:您可以非常详细地在每个页面上设置 Web 套接字,以监控每个用户打开的总页面数,当窗口卸载并且您只有一个连接时,这可能是会话的结束。
Set $config['sess_expire_on_close'] = TRUE; 我希望它会起作用