最近在看session的問題,需要判斷使用者是否登入,我發現以下2種方法都可以成功判斷是否登入的問題。
代碼如下:
第一種:if(empty($_SESSION)){ echo '您還未登入,請登入';}else{ echo '歡迎'.$_SESSION['uname'].' 這裡是首頁 '; echo '退出
';}第二種:if(!isset($_SESSION['uname'])){ echo '您還未登入,請登入
';}else{ echo '歡迎'.$_SESSION['uname'].' 這裡是首頁 '; echo '退出
';}
問題:在第二個判斷語句中,如果唯寫$_SESSION而不是$_SESSION['uname']的話,會報錯,而使用第一種方法的話,empty後邊的括弧內無論是$_SESSION['uname']還是$_SESSION都沒問題,請問是什麼原因呢?兩種方法哪一種會更好一點?或者說是更安全一點?謝謝
回複內容:
最近在看session的問題,需要判斷使用者是否登入,我發現以下2種方法都可以成功判斷是否登入的問題。
代碼如下:
第一種:if(empty($_SESSION)){ echo '您還未登入,請登入';}else{ echo '歡迎'.$_SESSION['uname'].' 這裡是首頁 '; echo '退出
';}第二種:if(!isset($_SESSION['uname'])){ echo '您還未登入,請登入
';}else{ echo '歡迎'.$_SESSION['uname'].' 這裡是首頁 '; echo '退出
';}
問題:在第二個判斷語句中,如果唯寫$_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,Null 字元串。
如果變數為0,則empty()會返回TRUE,isset()會返回TRUE; 如果變數為空白字串,則empty()會返回TRUE,isset()會返回TRUE; 如果變數未定義,則empty()會返回TRUE,isset()會返回FLASE;