如何在codeigniter中使用浏览器关闭来销毁会话

时间:2012-11-01 09:36:03

标签: php codeigniter session

最近我开发了一个带有codeigniter的Web应用程序。我在那里遇到了与会话相关的问题。

问题情景:

如果用户A登录到应用程序,则会话中设置用户ID。执行任务后,用户A关闭浏览器并离开计算机。不久之后,用户B来到并打开浏览器,看到应用程序处于登录状态。或者当用户B记下网址并按下输入时,直接将其重定向到应用程序,而不使用上一个会话进行任何身份验证。

我使用以下配置进行会话:

$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中的浏览器或浏览器选项卡来销毁所有会话?

9 个答案:

答案 0 :(得分: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
         }
      }
   }  

答案 1 :(得分:6)

修改config.php文件并将sess_expire_on_close设置为true

例如

$config['sess_expire_on_close'] = TRUE;

答案 2 :(得分:3)

添加注销按钮。

让该按钮破坏CI built in destroy function的会话。

$this->session->sess_destroy();

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

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

$ config [' sess_expiration'] = 0;

'sess_expiration'

The number of SECONDS you want the session to last.
Setting to 0 (zero) means expire when the browser is closed.

答案 5 :(得分:1)

$ config.php 文件

中的

change  $config['sess_expiration'] = 7200;

$config['sess_expiration'] = 0;

答案 6 :(得分:0)

for CI-3.0.4在“config.php”中找到下面的项目并相应地设置

$config['sess_expiration'] = -1;
$config['sess_time_to_update'] = -1;

答案 7 :(得分:0)

我用这种方式。这对您有帮助吗?

改变

$config['sess_expiration'] = 7200;

以上代码的结果是:

enter image description here

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

换行的结果是:

enter image description here

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

答案 8 :(得分:-1)

只需在sess_expiration =0文件中设置application/config/config.php 如Codeigniter documentation

中所述