php - 销毁 session 但保留闪存数据

标签 php session codeigniter tankauth

我正在使用 Tank Auth用于我的 CI 1.7.3 应用程序中的用户管理。一切正常,但我正在尝试设置一个 flash_message 以在用户注销时显示。问题是 $this->tank_auth->logout(); 函数破坏了 session 。我已将 Tank Auth 库中的注销功能修改为如下所示:

    function logout()   {
        $this->delete_autologin();

        // See http://codeigniter.com/forums/viewreply/662369/ as the reason for the next line
        $user_session_data = array('user_id' => '', 'username' => '', 'status' => '');
        $this->ci->session->set_userdata($user_session_data);
        $this->ci->session->unset_userdata($user_session_data);
    }

以前是

function logout()
        {
            $this->delete_autologin();

            // See http://codeigniter.com/forums/viewreply/662369/ as the reason for the next line
            $this->ci->session->set_userdata(array('user_id' => '', 'username' => '', 'status' => ''));

            $this->ci->session->sess_destroy();
        }

在我的 Controller 中我有

function logout(){
    if ($this->tank_auth->is_logged_in()) { // logged in
        $this->session->set_flashdata('status_message', $this->lang->line('auth_message_logged_out'));
        $this->tank_auth->logout();

        redirect('');           

    } 

如果我删除 $this->tank_auth->logout(); 函数,消息显示正常。我确定这是一个简单的 session 问题

最佳答案

如果您在调用 sess_destroy() 后尝试在同一个请求中使用数据库时设置 flashdata,它将不起作用(因为没有 session 可将 flashdata 附加到)。

要解决此问题,请在调用 sess_destroy() 之后添加 $this->ci->session->sess_create();。这是有效的,因为您在尝试向其附加数据之前重新创建了 session 。如果您在数据库中使用 session ,这是在 sess_destroy() 之后使用闪存数据的唯一方法。

关于php - 销毁 session 但保留闪存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332714/

相关文章:

php - 在 mySQL 数据库中存储图像的问题

php - 正则表达式匹配分号,但不在注释或引号中

node.js - 什么时候应该将 cookie-parser 与 express-session 一起使用?

session - 如何使 Wicket session 失效

php - codeigniter $this->db->like 区分大小写

php - Htaccess,如果文件夹存在则重定向

php - MySQL和PHP中的空数据库?

java - 使用 HTTP Post、Java、Json、PHP 的 Android 注册表单

asp.net-mvc - 使所有 Controller 无 session 的全局开关

php - CodeIgniter 从 Max 获取值(value)