0

私は単純な PHP ログイン システムを作成しました。ログイン システムは、唯一のユーザーとしてデータベースを使用しません。

<?php
if(isset($_SESSION['loggedin']))
{
 die("You are already logged in!");
}
if(isset($_POST['submit']))
{
if ($_POST["Username"]=="****" && $_POST["password"]=="****")
{
$_SESSION['loggedin'] = "1";
print $_SESSION['loggedin'];
} 
}
?>

次に、他のすべてのページに対して、if ステートメントを含む PHP チェッカーがあります。

<?php
session_start(); // NEVER forget this!
if(!isset($_SESSION['loggedin'] = "1"))
{
die("To access this page, you need to <a href='login.php'>LOGIN</a>");
} 
?>

ログインを「YES」に設定してから行を使用したときに機能しました

if(!isset($_SESSION['loggedin']))

しかし、この例 1 でログインした番号を割り当てようとすると、番号 1 でない場合は次のように死ぬことをチェッカーにチェックさせます。

if(!isset($_SESSION['loggedin'] = "1"))

うまくいきません。誰が私がどのように間違っているのか教えてもらえますか?

4

3 に答える 3

3

= の代わりに == を使用してみてください。「=」を使用すると、値 1 がセッション変数に割り当てられます。

if(!isset($_SESSION['loggedin'] == "1"))

ただし、より良いオプションは次のとおりです。

if($_SESSION['loggedin'] != "1")

Yoda 条件を使用して$_SESSION['loggedin'] が設定されているかどうかを確認すると、次のようになります。

if(!isset($_SESSION['loggedin']) || "1" != $_SESSION['loggedin'])
于 2012-09-03T11:27:22.173 に答える
1
if( !isset($_SESSION['loggedin']) || $_SESSION['loggedin'] != "1" )

また、最初の例の上部に session_start() があることを確認してください。

<?php
session_start();

if(isset($_SESSION['loggedin']))
{
    die("You are already logged in!");
}

if(isset($_POST['submit']))
{
    if ($_POST["Username"]=="****" && $_POST["password"]=="****")
    {
        $_SESSION['loggedin'] = "1";
        print $_SESSION['loggedin'];
    } 
}
?>
于 2012-09-03T11:28:14.567 に答える
1

文字列を値として使用している場合は、php 関数strcmp($str1, $str2)を使用してバイナリ セーフな文字列比較を行うこともできます。したがって、次のテストを実行できます。

if(isset($_SESSION['loggedin']) && strcmp($_SESSION['loggedin'], '1') == 0)

上の値strcmpが等しい場合は、0 と評価されます。str1より小さい場合はstr2< 0 を返し、str1より大きい場合str2は > 0 を返します。

詳細情報: http://php.net/manual/en/function.strcmp.php

于 2012-09-03T11:43:37.310 に答える