登录后,用户名不会在标头中更新


User's name doesn't update in header after login

我正在使用 HTML 表单指南中的 CodeIgniter + 注册/登录脚本。我想在导航栏中显示用户名(登录身份为:[用户名])。所以在控制器中,我添加了一个变量:

$data['login'] = '';
$this->load->view('templates/header', $data);
$this->load->view('templates/nav', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);

并在导航中.php :

<?php
if ($login!='')
    echo "Logged in as: ".$login;
?>

在登录后加载的访问控制页面中:

$login = $fgmembersite->UserFullName();

即:

function UserFullName()
    {
        return isset($_SESSION['name_of_user'])?$_SESSION['name_of_user']:'';
    }

用户名在"访问控制页面"中正确返回,但在导航栏中未正确返回。我相信这是因为视图加载的顺序。在加载templates/nav之前,变量$data['login']可能会根据我在控制器中声明的内容被清除。有解决方法吗?

为什么还需要在控制器中添加$data['login']?如果您已经登录了用户,则必须将该信息放在会话中吗?如果不是,请先在会话中保存登录用户的名称。例如。

$this->session->set_userdata('logged_user_name', $username);

现在,在要显示名称的页面中,只需执行以下操作:

if( $this->session->userdata('logged_user_name') ){
    echo $this->session->userdata('logged_user_name');
}

使用以下代码段顺序-

代码段 1:

$data['login'] = '';
$this->load->view('templates/header', $data);
$this->load->view('templates/nav', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);

代码段 2:

function UserFullName()
{
    return isset($_SESSION['name_of_user'])?$_SESSION['name_of_user']:'';
}

代码段 3:

$login = $fgmembersite->UserFullName();

代码段 4:

<?php
    if ($login!='')
        echo "Logged in as: ".$login;
?>