在codeigniter 3中加载完整导航之前检查活动会话

时间:2016-03-04 14:13:17

标签: php codeigniter

我有一个带索引功能的欢迎控制器:

public function index()
    {
        $this->load->view('templates\header');      
        $this->load->view('welcome_message');
        $this->load->view('templates\footer');
    }

标题视图代码如下:

<header>
    <div class="navbar navbar-default navbar-static-top" role="navigation">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="<?php echo base_url() ?>">
                    Test App
                </a>
            </div>
        </div>
    </div>
</header>

到目前为止它完美无缺。 我还想在导航栏中添加以下代码(带有标题标签)作为菜单项,但仅限于用户会话处于活动状态。因此,如果用户登录,则只有他/她应该能够看到菜单项,否则用户应该只看到品牌名称为“Test App”的导航栏。

<div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav navbar-right">
                        <li>
                            <a href="<?php echo base_url('welcome') ?>"><i class="fa fa-tachometer"></i> Dashboard</a>
                        </li>
                        <li>
                            <a href="<?php echo base_url('admin/logout') ?>"><i class="fa fa-sign-out"></i> Logout
                            </a>
                        </li>
                    </ul>
                </div>

我还有一个帮助程序,如果用户登录或未登录,我会检查并返回true或false,我在控制器中使用它。我不习惯在视图中使用它,因为我必须回显菜单项并调整大量的双/单引号才能使其工作。有没有一个巧妙的方法来做到这一点?

登录助手代码:

function is_logged_in() {

    $CI =& get_instance();

    $user = $CI->session->userdata('username');
    if ( !isset($user) )
    {
        return false; 
    }
    else 
    {
        return true;
    }
}

2 个答案:

答案 0 :(得分:0)

您可以根据控制器的用户会话选择要显示的内容。

例如:

 if($this->session->userdata('username')<>NULL){ 
    $data['logged_in'] = 1;
 }else{
    $data['logged_in'] = 0;
 }
 $this->load->view('templates\header',$data);

在视图中:

   if($logged_in==1){
      //header with logged in options
     }else{
      //header with normal options.
      }

答案 1 :(得分:0)

为什么不使用session_status()

在其documentation个评论中发布的用户之一,用于检查会话是否已启动:

<?php
/**
* @return bool
*/
function is_session_started()
{
    if ( php_sapi_name() !== 'cli' ) {
        if ( version_compare(phpversion(), '5.4.0', '>=') ) {
            return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
        } else {
            return session_id() === '' ? FALSE : TRUE;
        }
    }
    return FALSE;
}

// Example
if ( is_session_started() === FALSE ) session_start();
?>