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

Ari*_*lam 9 php session codeigniter

最近我开发了一个带有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;
Run Code Online (Sandbox Code Playgroud)

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

小智 7

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

例如

$config['sess_expire_on_close'] = TRUE;
Run Code Online (Sandbox Code Playgroud)


art*_*gis 6

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

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

要解决重定向问题,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
         }
      }
   }  
Run Code Online (Sandbox Code Playgroud)