最近在看session的問題,需要判斷使用者是否登錄,我發現以下2種方法都可以成功判斷是否登入的問題。
程式碼如下:
<code>第一种: if(empty($_SESSION)){ echo '您还未登录,请<a href="login.php">登录</a><p>'; }else{ echo '欢迎'.$_SESSION['uname'].' 这里是主页 '; echo '<a href="quit.php">退出</a><p>'; } 第二种: if(!isset($_SESSION['uname'])){ echo '您还未登录,请<a href="login.php">登录</a><p>'; }else{ echo '欢迎'.$_SESSION['uname'].' 这里是主页 '; echo '<a href="quit.php">退出</a><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>'; } 第二种: if(!isset($_SESSION['uname'])){ echo '您还未登录,请<a href="login.php">登录</a><p>'; }else{ echo '欢迎'.$_SESSION['uname'].' 这里是主页 '; echo '<a href="quit.php">退出</a><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>