如何在 Codeigniter 中检查是不是设置了会话?

Posted

技术标签:

【中文标题】如何在 Codeigniter 中检查是不是设置了会话?【英文标题】:How to Check either Session is Set or Not in Codeigniter?如何在 Codeigniter 中检查是否设置了会话? 【发布时间】:2014-05-24 00:28:50 【问题描述】:

我知道如何在核心 php 中创建会话,并且我知道如何在 codeigniter 中执行此操作,但我无法理解如何检查会话是否已设置?我试图通过 View 进行检查,但它总是给我消息Please Login

请告诉我如何检查会话是否已设置

控制器

if ($user_type=='Student')

  if ($LoginData=   $this->loginmodel->studentLogin($username,$password))
  
    foreach($LoginData as $UserId)
    
      $currentId= $UserId->StudentId;
    
    //[[session]]

    $data['students_data']=         $this->loginmodel->student_profile($currentId);

    $this->session->userdata('$data');

    $this->load->view('students',$data);
  
  else
   
  //$data['message']= array('Invalid Username or Password');
    $this->load->view('Login');
    echo "Invalid Username or Password";
  

elseif ($user_type=="Faculty")

  if($data['faculty_data']=$this->loginmodel->faculty_admin($username, $password))
  
    $this->session->userdata('$data');

    $this->load->view('faculty');
  
  else
  
    $this->load->view('Login');
    echo "Invalid Username or Password";
  

查看

<?php 

if (!$this->session->userdata('$data'))

    echo "Please Login";

else




?>

<!DOCTYPE

【问题讨论】:

【参考方案1】:

创建会话:

$newdata = array(
               'username'  => 'johndoe',
               'email'     => 'johndoe@some-site.com',
               'logged_in' => TRUE
           );

$this->session->set_userdata($newdata);

  $this->session->set_userdata('some_name', 'some_value');

但在此之前,请确保您已包含会话库。

$this->load->library('session');

获取会话数据:

if($this->session->userdata('whatever_session_name_is'))
     // do something when exist
else
    // do something when doesn't exist

【讨论】:

在哪里写这个?在视图或控制器中? 您可以轻松地在视图和控制器上使用它。但是在视图上你需要使用 code ?> 那 我在视图中写了同样的东西,它总是给我错误的条件消息..你能告诉我在哪里分配Seesion我已经在login method中声明了它 是的登录控制器是一种方法。但您也可以使用 Ion_Auth 库进行身份验证。 这是标准方式。 ***.com/a/51906048/9573341【参考方案2】:
 if ($this->session->userdata('variable') !== FALSE) 
  echo 'Variable is set';
 else 
  echo 'Variable is not set';
  

More info

Demo code

【讨论】:

在哪里写这个?在视图或控制器? —— @ravi:你的教程很棒!但是我的登录/注销有问题(让我们以您的演示为例),当我登录然后注销并尝试单击浏览器中的后退按钮(它已登录,对吗?),然后尝试添加消息然后出现错误。我的问题是,如何处理这个问题?这是导致错误的缓存吗?但我也试过这段代码(清除缓存):LINK HERE! 谢谢,这是“如何检查会话是否已设置”问题的答案 这是正确答案。接受的答案无论是设置还是设置和 null/0/blank 都返回 true。测试该值是否已设置的唯一方法是 ===FALSE【参考方案3】:

使用 has_userdata

    if ($this->session->has_userdata('username')) 

        return TRUE;       

     else 

        return FALSE;     

    

【讨论】:

这是标准的使用方式。其他选项只是解决方法。

以上是关于如何在 Codeigniter 中检查是不是设置了会话?的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter - 检查数据库中是不是已存在值

Codeigniter-检查用户是不是存在于月份

如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?

如何检查codeigniter框架的版本?

CodeIgniter:检查记录是不是存在

CodeIgniter:检查用户是不是登录多个页面