0

取り組んでいるプロジェクトに問題があります。PHP + セッションを使用して単純なログイン システムをコーディングしようとしています。しかし、私は自分のセッションを失いました。その理由はよくわかりません。コード:

index.php

<?php
session_start();

if(!isset($_SESSION['logedin'] == True)){
    <form action = "login.php" method = "post" id="login-form" class = "login-form">
        <input type = "text" name = "username" maxlength = "100"/>
        <input type = "password" maxlength = "50" name = "password"/>

        <button type="submit">Sign in</button>
    </form>
}else{
   echo "Loged in.";
}
?>

login.php

<?php
    session_start();

    $username = $_POST['username'];
    $password = $_POST['password'];

    if(!isset($_SESSION['logedin'] == True)){
        if($username == 'username' && $password == 'password'){
                    $_SESSION['logedin'] = True;
                    header("index.php"); // Loged in
        }
    }
?>

ここに記載するには長すぎるため、実際のコードはこれではありませんが、これは単にコードについての履歴書です... index.php へのセッションを開くと機能するため、頭がおかしくなりますが、自分のページ (この場合、フォームを介して login.php) から出て、インデックスに戻ると、セッションが消えてしまいます...

私はフレームワークなどを使用していないと言わざるを得ません。それは単純な形式であり、すべて PHP で行われます。

4

1 に答える 1

2

最初の行のかっこが問題になるでしょう:

if(!isset($_SESSION['logedin'] == True)){

への変更:

if(!isset($_SESSION['logedin'])) {

なぜこの条件で二重否定をしているのですか? する代わりに!isset == true、ただしてくださいisset == false。これはコードに混乱を招く可能性が高く、コードがより直感的 (かつ単純) であるほど優れています。

login.php には次の行もあります。

if(!isset($_SESSION['logedin'] == True)){

基本的に、isset(true) == falseどちらが常に false を返す必要があると言っています。$_SESSION['logedin'] == true本当だからです。if (isset($_SESSION['logedin']))ログインしている場合に true になるように変更します。

この状態をもう少し詳しく見て、何をしているのか見てみましょう

if (false == isset(
 $_SESSION['loged'] == true  // will be true if you're logged in
 )  // isset will return true, but you're expecting a false
)

isset は常に true を返します。$_SESSION['logedin'] == true が true を返すか false を返すかは、"isset" になります。Isset は、戻り値が null であるか、var が存在しない場合にのみ false を返します。「False」は値であり、存在します。それは理にかなっていますか?これが紛らわしい場合は申し訳ありません。基本的に、isset では条件を使用しないでください。:)。isset を条件の一部として使用しますが、isset パラメーターには渡さないでください。

于 2013-03-31T20:27:59.397 に答える