有关于isset和empty的问题?

WBOY
发布: 2016-10-22 00:14:09
原创
1316 人浏览过

最近在看session的问题,需要判断用户是否登录,我发现以下2种方法都可以成功判断是否登录的问题。
代码如下:

<code>第一种:
if(empty($_SESSION)){

    echo '您还未登录,请<a href="login.php">登录</a><p>';

}else{

    echo '欢迎'.$_SESSION['uname'].' 这里是主页 ';

    echo '<a href="quit.php">退出</a></p>
<p>';
}

第二种:
if(!isset($_SESSION['uname'])){

    echo '您还未登录,请<a href="login.php">登录</a></p>
<p>';

}else{

    echo '欢迎'.$_SESSION['uname'].' 这里是主页 ';

    echo '<a href="quit.php">退出</a></p>
<p>';
}

</p></code>
登录后复制
登录后复制

问题:在第二个判断语句中,如果只写$_SESSION而不是$_SESSION['uname']的话,会报错,而使用第一种方法的话,empty后边的括号内无论是$_SESSION['uname']还是$_SESSION都没问题,请问是什么原因呢?两种方法哪一种会更好一点?或者说是更安全一点?谢谢

回复内容:

最近在看session的问题,需要判断用户是否登录,我发现以下2种方法都可以成功判断是否登录的问题。
代码如下:

<code>第一种:
if(empty($_SESSION)){

    echo '您还未登录,请<a href="login.php">登录</a><p>';

}else{

    echo '欢迎'.$_SESSION['uname'].' 这里是主页 ';

    echo '<a href="quit.php">退出</a></p>
<p>';
}

第二种:
if(!isset($_SESSION['uname'])){

    echo '您还未登录,请<a href="login.php">登录</a></p>
<p>';

}else{

    echo '欢迎'.$_SESSION['uname'].' 这里是主页 ';

    echo '<a href="quit.php">退出</a></p>
<p>';
}

</p></code>
登录后复制
登录后复制

问题:在第二个判断语句中,如果只写$_SESSION而不是$_SESSION['uname']的话,会报错,而使用第一种方法的话,empty后边的括号内无论是$_SESSION['uname']还是$_SESSION都没问题,请问是什么原因呢?两种方法哪一种会更好一点?或者说是更安全一点?谢谢

建议使用第二种。在正确使用第二种的前提下,代码会更加严谨。
empty是是否为空,isset是变量是否存在。
只要你开启session功能,session_start();那么就会有个数组变量$_SESSION存在。
但是如果你没有登录,$_SESSION就仅仅是个空数组,只有你登陆了,才会往$_SESSION这个数据写数据,比如
$_SESSION['uname']。
所以第二个只写$_SESSION会报错的原因,就是你尚未登陆,所以$_SESSION['uname']不存在,但是$_SESSION作为一个空数组是存在的。

empty 判断参数是否被认为是空。即使参数存在,但是他的值为false,参数依旧会被认为是空。

if(isset($_SESSION['uname']) && !empty($_SESSION['uname'])){//这样好了呀

}

isset和empty的区别:empty()和isset()的处理对象无外乎未定义变量,0,空字符串。 

<code>如果变量为0,则empty()会返回TRUE,isset()会返回TRUE; 
如果变量为空字符串,则empty()会返回TRUE,isset()会返回TRUE; 
如果变量未定义,则empty()会返回TRUE,isset()会返回FLASE; </code>
登录后复制
相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板