2011-12-23 74 views
6

我有笨注销控制器:注销笨

<?php 

class Logout extends MY_Controller { 

    function index() 
    { 

     $this->session->sess_destroy(); 
     redirect('index.php'); 
    } 
} 

这将记录我出去,但是当我打电话登录后另一个控制器,如“/网站/ addnewpost”, 这只是记录我再次,作为如果激情尚未被破坏。这是为什么发生?

+0

删除重定向。创建另一个仅包含'var_dump($ _ SESSION)'的脚本,并在注销后调用该脚本以检查会话是否被销毁 – xbonez 2011-12-23 13:59:19

+0

什么是您的登录部分? (其中你检查会话) – ALH 2011-12-23 14:00:49

+0

@xbonez - 纠正我,如果我在这里错了,但我认为CodeIgniter不使用本机PHP会话。 – Tyil 2011-12-23 15:19:27

回答

11

关注Alex的建议,但使用CI代码:)。我的意思是,尝试单独取消设置每个会话数据。我认为在2.0.3版本中我曾经读过一篇关于这个问题的文章,但现在我不记得了,我也没有时间去搜索参考文献。不过在他们的论坛上,建议是一样的:逐个取消每个会话元素。

$this->session->unset_userdata('data_one'); 
$this->session->unset_userdata('data_two'); 
$this->session->unset_userdata('data_three'); 
$this->session->unset_userdata('data_one'); 
$this->session->sess_destroy(); 
redirect('home','refresh'); // <!-- note that 
//you should specify the controller(/method) name here 

需要重定向,因为CI的会话都只是饼干,而不是本机PHP会话阵列。

另一件事...确保错误不在您的登录方法中,无论您是否成功注销,它都会记录您的登录方法!

+0

工作人员谢谢你! – 2011-12-23 21:43:29

2

尽量明确删除项目是这样的:

$this->Session->delete('User'); 
$this->Session->destroy(); 
$this->Cookie->delete("User"); 
$this->Cookie->destroy(); 
$this->Auth->logout(); 
$this->redirect('whereever'); 
1

我的问题与服务器端的缓存有关。我可以修复它是通过附加随机文本为退出链接的最快捷:

<?php 
    $this->load->helper('string'); 
    echo anchor('/home/logout/'.random_string(), 'logout'); 
?> 

家/注销包含相同的代码中的问题function index

就这样你知道redirect('/', 'refresh')对我不起作用,但我再次做了一个快速测试。

我猜测random_string()方法可以通过输出强制高速缓存被清除的头来替代。正如你可能猜到的那样,现在我无法做到这一点,因为我超级忙。也许以后。

1

您也可以尝试手动设置您的“logged_in”或您称为会话的任何内容为false。然后,销毁所有其他会话数据。

$this->session->set_userdata('logged_in', FALSE); 
    $this->session->session_destroy(); 
    redirect('index'); 
0

首先,我们必须加载会话库来处理会话,而不是取消设置会话ID并销毁会话。我正在使用此代码来取消我的会话和安全注销。

$this->load->library('session'); 
$this->session->set_userdata('user_id', FALSE); 
$this->session->sess_destroy(); 
$this->load->view('your URL'); 
+0

请不要发布代码的答案。包括你已经改变的一些解释,它为什么起作用等等。 – 2017-06-29 02:32:41