10

最近我用 codeigniter 开发了一个 web 应用程序。我在那里严重面临与会话相关的问题。

问题场景:

如果用户 A 登录到应用程序,则用户 ID 在会话中设置。完成任务后,用户 A 关闭了浏览器并离开了计算机。过了一会儿,用户 B 过来打开浏览器,看到应用程序处于登录状态。或者当用户 B 写下 url 并按 enter 时,它直接重定向到应用程序,而无需使用上一个会话进行任何身份验证。

我为会话使用了以下配置:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 1800;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

现在我的问题是如何通过在 codeigniter 中关闭浏览器或浏览器选项卡来销毁所有会话?

4

10 回答 10

8

编辑config.php文件并设置sess_expire_on_closetrue.

例如

$config['sess_expire_on_close'] = TRUE;
于 2013-10-28T07:55:31.950 回答
6

您可以使用 javascript 和异步请求。当您关闭窗口时,会调用 window.onunload 的处理程序

var unloadHandler = function(e){
        //here ajax request to close session
  };
window.unload = unloadHandler;

解决重定向问题,php端可以使用计数器

  class someController  extends Controller {

   public function methodWithRedirection(){

        $this->session->set_userdata('isRedirection', 1);
        //here you can redirect  
   }
}
class homeController extends Controller{
   public function closeConnection(){
        $this->load->library('session');
        if($this->session->userdata('isRedirection')!== 1){
            //destroy session
         }
      }
   }  
于 2012-11-01T10:20:38.793 回答
3

添加注销按钮。

让该按钮使用 CI 的内置销毁功能销毁会话。

$this->session->sess_destroy();
于 2013-07-16T19:55:37.360 回答
2

好吧,我不知道你是否已经有了解决方案,但我发现自己在 CodeIgniter 3.0 版中处于相同的场景中。在config.php中,转到Session Variables部分,您可以设置:

$config['sess_expiration'] = 0;

sess_expiration:您希望会话持续的秒数。如果您想要一个未过期的会话(直到浏览器关闭),请将值设置为零:0

于 2015-04-06T20:13:13.327 回答
2

看看这个,看看这是否有帮助。

https://github.com/EllisLab/CodeIgniter/wiki/PK-Session

于 2012-11-02T15:10:48.077 回答
1

$config.php文件 中

change  $config['sess_expiration'] = 7200;

$config['sess_expiration'] = 0;
于 2016-08-18T06:05:05.230 回答
1

只需按照 Codeigniter文档sess_expiration =0中的说明在文件中设置application/config/config.php

于 2019-06-28T07:19:34.763 回答
0

打开通用配置文件application/config/config.php,搜索 $config['<strong>sess_expiration']

改变

$config['sess_expiration'] = 7200;

$config['sess_expiration'] = -1;
于 2015-08-26T22:15:32.400 回答
0

对于 CI-3.0.4,在“config.php”中找到以下项目并进行相应设置

$config['sess_expiration'] = -1;
$config['sess_time_to_update'] = -1;
于 2016-03-07T08:54:31.370 回答
0

我用这种方式。这可以帮助你吗?

改变

$config['sess_expiration'] = 7200;

上面代码的结果是:

在此处输入图像描述

$config['sess_expiration'] = time() + 7200;

换行的结果是:

在此处输入图像描述

现在,如果您关闭浏览器窗口,会话将被自动删除。

于 2021-08-10T18:07:40.793 回答