2016-04-02 12 views
2

私は、セッション変数が設定されているかクッキーが設定されているかをチェックするユーザーのログイン状態をチェックするPHPコードをいくつか持っています。いずれかの条件が真であれば、グーグル・パーミッションでなければログイン・ページにリダイレクトします。コードは次のようになります。issetとPHPの関数または演算子の場合

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

セッションが破棄されると(ブラウザを閉じるなどの理由で)、ユーザーがログインページにリダイレクトされるという問題があります。しかし、クッキーがまだ存在しているので、クッキーデータを読み込んでユーザアクセスを許可する必要があります(私はクッキーがまだエコークッキーデータによって存在していることを確認しました)。

+0

'IF((ISSET($ _ SESSIONは、[ "USERID"])&& ISSET ($ _SESSION ["username"])&& isset($ _ SESSION ["password"]))||(isset($ _ COOKIE ["userid"])&& isset($ _ COOKIE ["username"])&& isset($ _ COOKIE ["password"]))){ } else { header( "location:register.php"); } ' –

+0

そのコードを公開すると、私にリンクを提供できますか?私は何かを試みます。 –

+0

OOPの詳細やSlimやSilexのようなフレームワークの使用を真剣にお勧めします。 http://www.phptherightway.com/ – Lucas

答えて

1

&&でそれらを一緒に入れて、以下のような||で区切る: -

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への依存度は、ユーザーがいつでも変更できるため、良くありません。

1

あなたはこのようにグループにあなたの文をブレーカのカップルを追加する必要があります。

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またはユーザー名とパスワードを入力します。 ユーザーIDとユーザー名が必要な場合は、||このフィールドのisset()関数間の角括弧で囲みます。

2

&&は、||よりも優先度が高いため、||を角かっこで保護する必要があります。また、空のif声明を持つことは、単に冗長です:あなたはSESSIONCookie以内にそれを混乱されているので、あなたの状態ビットを変更する必要が

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

あなたのifの状態にかっこが少なくなっていると思います。あなたのコードをより読みやすくするには、次の2つの機能

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 { 

} 
関連する問題