有關於isset和empty的問題?

來源:互聯網
上載者:User
最近在看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; 
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.