最近我开发了一个带有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中的浏览器或浏览器选项卡来销毁所有会话?
答案 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)
答案 3 :(得分:2)
看看这个,看看这是否有帮助。
答案 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)
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;
以上代码的结果是:
到
$config['sess_expiration'] = time() + 7200;
换行的结果是:
现在,如果您关闭浏览器窗口,会话将被自动删除。
答案 8 :(得分:-1)
只需在sess_expiration =0
文件中设置application/config/config.php
如Codeigniter documentation