注销codeigniter

时间:2011-12-23 13:55:23

标签: php codeigniter

我在codeigniter中有一个注销控制器:

<?php

class Logout extends MY_Controller {

    function index()
    {

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

这会让我退出,但是当我在登录后调用另一个控制器时,例如“/ site / addnewpost”, 这只是让我再次登录,好像以前没有被摧毁过。为什么会这样?

5 个答案:

答案 0 :(得分: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的会话只是cookie,而不是原生的php会话数组。

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

答案 1 :(得分:2)

尝试明确删除这样的项目:

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

答案 2 :(得分:1)

我的问题与服务器端的缓存有关。我能解决的最快的方法是将随机文本附加到注销链接:

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

home / logout在问题中包含与function index相同的代码。

您知道redirect('/', 'refresh')对我不起作用,但我再次做了快速测试。

我猜测random_string()方法可以替换为输出标题,强制缓存被清除等等。正如你可能已经猜到的那样,我现在不能这样做,因为我超级忙。也许以后。

答案 3 :(得分:1)

您也可以尝试手动将“logged_in”或您调用的会话设置为false。然后,销毁所有其他会话数据。

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

答案 4 :(得分:0)

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

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