gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:00 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com