如何检查会话中的变量是否被声明?

时间:2013-12-26 21:40:23

标签: php codeigniter session

我想弄出一些东西。我正在使用CodeIgniter,我在会话中存储了一些信息,所以我可以在任何地方访问它。我需要检查一个变量是否已经设置,但我使用的代码不起作用(控制器分开)

这是我在会话中存储数据的方式:

$this->session->set_userdata('myvalue', 'x');

这就是我试图检查变量是否已被声明的方式:

if (isset($this->session->userdata('myvalue'))) //doesn't work

提前感谢阅读和回复;)

顺便说一句:我需要这个功能,因为如果我知道var尚未被声明,则意味着会话已经过期并且已经被破坏。所以我想将用户转发到一个视图,我告诉他他已经长时间处于非活动状态并且已经自动注销等等。

2 个答案:

答案 0 :(得分:1)

没有必要使用函数,如果未设置变量,userdata()已经返回FALSE,所以:

if (!$this->session->userdata('myvalue')) {
   //code here
}

就够了。

if (isset($this->session->userdata('myvalue')))不起作用,因为isset()无法使用函数的返回值。你应该得到一个E_NOTICE说,但是,像

  

不能在写上下文中使用方法返回值

答案 1 :(得分:1)

这是检查CodeIgniter会话中是否设置了特定值的方法:

if ( $this->session->userdata('myvalue') ) {
    // The item 'myvalue' exists in the session
} else {
    // The item 'myvalue' does not exist in the session
}

这就是CodeIgniter的userdata()函数在system/libraries/Session.php中的工作原理:

function userdata($item)
{
    return (!isset($this->userdata[$item])) ? FALSE : $this->userdata[$item];
}

如果会话中不存在该项目,则返回FALSE,否则该项目为。