簡體   English   中英

isset和if函數在php中帶有or運算符

[英]isset and if function in php with or operator

我有一些PHP代碼來檢查用戶登錄狀態,以檢查是否設置了會話變量或cookie。 如果任一條件為真,則獲得大權限,否則重定向到登錄頁面。 代碼如下:

if(isset($_SESSION["userid"]) || isset($_COOKIE["userid"]) && isset($_SESSION["username"]) || isset($_COOKIE["username"])  && isset($_SESSION["password"]) || isset($_COOKIE["password"])){
} else {
header("location : register.php");
}

問題是,如果會話被破壞(通過關閉瀏覽器或任何其他原因),則會將用戶重定向到登錄頁面。 但是它要做的是讀取cookie數據並授予用戶訪問權限,因為cookie仍然存在(我已經檢查了echo cookie數據是否仍然存在cookie)。

&&的優先級高於|| ,因此您需要保護|| 帶括號。 同樣,有一個空的if語句只是多余的:

if(!(isset($_SESSION["userid"]) || isset($_COOKIE["userid"]) ||   
   !(isset($_SESSION["username"]) || isset($_COOKIE["username"])) || 
   !(isset($_SESSION["password"]) || isset($_COOKIE["password"]))) {
    header("location : register.php");
}

您需要添加幾個斷路器來對語句進行分組,如下所示:

    if( 
    ( isset($_SESSION["userid"]) || isset($_SESSION["username"]) && isset($_SESSION["password"]) ) 
||
    ( isset($_COOKIE["userid"]) || isset($_COOKIE["username"]) && isset($_COOKIE["password"]) )
){
    // Your action
} else {
header("location : register.php");
}

該語句將檢查是否設置了COOKIE或SESSION,並檢查或user_id或用戶名AND密碼。 如果您需要AND user_id和AND用戶名,請替換||。 在此字段的isset()函數之間的括號中。

您需要稍微改變一下條件,因為您在SESSIONCookie中將其混淆了。 將它們與&&放在一起,並用||分開 如下所示:

if((isset($_SESSION["userid"]) &&  isset($_SESSION["username"]) && isset($_SESSION["password"])) || (isset($_COOKIE["userid"]) && isset($_COOKIE["username"])  && isset($_COOKIE["password"]))){

    // your action that you want

} else {

   header("location : register.php");
}

注意:-請注意,所有地方(彼此的頁面和條件)都將應用相同的內容,否則您將面臨問題。

同樣,對cookie更多依賴也是不好的,因為用戶可以隨時更改它。

我覺得你if條件缺少一些括號。 為了使代碼更具可讀性,您可以創建兩個函數

function isSessionValid()
{
    return isset($_SESSION["userid"]) && isset($_SESSION["username"]) && isset($_SESSION["password"]);
}

function isCookieValid()
{
    return isset($_COOKIE["userid"]) && isset($_COOKIE["username"]) && isset($_COOKIE["password"]);
}

然后在if語句中使用這些功能:

if (isSessionValid() || isCookieValid()) {

} else {

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM