PHP Session无法正常工作[已编辑:已附加代码]

时间:2016-01-23 13:28:36

标签: php session redirect cookies

编辑:

我太伤心了,这个问题被低估了,我被这个困了好几个小时。我希望有一个可爱的炼金术士可以让我从debuff条件中恢复过来。

我正在使用codeigniter,我认为问题是当新会话(带有flash消息的会话)被设置时,会话ID(作为cookie)不会发送到客户端,因此重定向到其他页面后,创建一个全新的会话。

我的退出功能出现问题。逻辑只需单击“注销”,使用flash消息重定向到索引页面 - 您已经注销。

经过检查,我发现了这些东西:旧会话清除没有问题,新会话在重定向之前创建,新会话确实有flash消息。然后奇怪的事情发生,当重定向到索引时,创建一个新的更新的会话。 但是,如果我在添加Flash消息后没有运行重定向,并点击浏览器的刷新,那么手动转到索引,带有flash消息的会话就会出现并完美显示。

我在重定向或刷新浏览器之前也找到了,虽然重新创建了会话,但我的cookie中没有会话ID。刷新操作将会话ID发送到我的cookie。

我希望我明白这个问题。谢谢。

//auth controller    
public function logout()
{
    $this->my_auth_lib->logout();
    $this->session->set_flashdata('alert','You have been logged out!');
    redirect('index');
}

//my_auth_lib 
public function logout()
{
    return $this->session->sess_destroy();
}

// session library sess_destory method
public function sess_destroy()
{
    // get session name.
    $name = session_name();
    if (isset($_COOKIE[$name])) {
        // Clear session cookie
        $params = session_get_cookie_params();
        setcookie($name, '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
        unset($_COOKIE[$name]);
    }

    $this->sess_create();
}

//session library sess_create method
    public function sess_create()
{
    $_SESSION[$this->sess_namespace] = array(
        'session_id' => md5(microtime()),
        'last_activity' => time()
    );

    // Set matching values as required
    if ($this->_config['sess_match_ip'] === true) {
        // Store user IP address
        $_SESSION[$this->sess_namespace]['ip_address'] = $this->ci->input->ip_address();
    }

    if ($this->_config['sess_match_useragent'] === true) {
        // Store user agent string
        $_SESSION[$this->sess_namespace]['user_agent'] = trim(substr($this->ci->input->user_agent(), 0, 50));
    }

    $this->store = $_SESSION[$this->sess_namespace];
}

1 个答案:

答案 0 :(得分:0)

尝试添加

exit;

重定向后的行中的

语句

从这里得到了想法

PHP: session isn't saving before header redirect