0

私のコードには、ユーザー名とパスワードの両方のテキスト フィールドを作成する 2 つのフォームがあります。PHP スクリプトはフォーム情報を受け取り、それをサーバーに送信して、フォーム データの文字列が必要なユーザー名とパスワードに対応しているかどうかを判断します。また、ユーザーをログアウトさせる logout.php スクリプトに移動するログアウト ボタン フォームもあります。ログアウト ボタンをクリックすると、ユーザーが login.php スクリプトに送られ、セッションが終了します。ユーザーに Web サイトにログインさせることができず、logout.php のあるサイトにアクセスすると、ユーザーに login.php ページに移動させることができません。これが私のコードです:

ログイン php コード:

   <?php
               session_start();
               if($_SESSION['login'] == true)
               {
                header("Location:index.php");
               }
               else
               {
               if($_POST['username'] == 'username')
               {
                   if($_POST['pass'] == 'password')
                   {

                      $_SESSION['login'] = true;
                      header('Location:index.php');

                    }
               }
               }
       ?>

ログインフォーム:

        <form action="login.php" method="post">
        Username: <input type="text" name="username" /> </br>
        Password: <input type="password" name="pass" /> 
        <input type="submit" value="submit"/>
        </form>

ログアウト PHP コード:

    <?php 
     session_start();
     session_destroy();
     header('Location:index.php');
     ?>

インデックス php コード:

    <?php
      session_start();
      if($_SESSION['login'] =! true || $_SESSION['login'] == "")
      {
          header('Location:login.php');
      }
    ?>

インデックス フォーム コード:

         <form action="logout.php" method="post">
         <input type="submit" name="logout" value="logout" />
         </form>

PHP コードは、何かが表示される前に html コードの上にリストされているため、一部のフォーム アクションがページを再度コールバックするのはなぜですか。ありがとうございました

4

4 に答える 4

2

あなたの主な問題は、間違った演算子=!ですindex.php-正しい使用法は!=「等しくない」です。詳細: http://php.net/manual/en/language.operators.comparison.php

login.php ファイルを少しクリーンアップできます。

login.php

session_start();
$redirect = false;
if($_SESSION['login'] == true) {
    $redirect = true;
} elseif (
    isset($_POST['username']) && 
    $_POST['username'] == 'username' && 
    $_POST['pass'] == 'password'
){
    $_SESSION['login'] = true;
    $redirect = true;
}
if ($redirect) {
    header("location:http://www.mydomain.com/index.php");
    die();
}

:プロパティに使用する場所を除いて、ログインフォームは問題ありません。すべての HTML 要素のプロパティはname="value"-- 等号に注意してください。だからあなたのフォーム:

<form action="login.php" method="post">

ログアウトフォームで正しいです。

目標の 1 つは、使用するコードの量を減らすことです。したがって、同じことを何度も行う場合は、そのコードをクラス、関数、または単純にインクルードする別のファイルとして分離するようにしてください。そのために、ログインのチェックを別のファイルに入れることができます。

security.php

session_start();
if(!isset($_SESSION['login']) || $_SESSION['login'] !== true) {
    header('location:http://www.mydomain.com/login.php');
    die();
}

...次にrequire_once、ユーザーがログインする必要があるページでそれをプルするために使用します。

index.php

require_once('security.php');
// the rest of your index.php code here

ドキュメンテーション

于 2012-07-13T15:08:10.697 に答える
1

ログイン フォームのフォーム フィールドが正しくありません。

それは読むべきです:

<form action="login.php" method="post">
    Username: <input type="text" name="username" /> </br>
    Password: <input type="password" name="pass" /> 
    <input type="submit" value="submit"/>
</form>

また、私はあなたのブール条件だと思います

if($_SESSION['login'] =! true || $_SESSION['login'] == "")

する必要があります

if($_SESSION['login'] != true || $_SESSION['login'] == "")

試してみてください。うまくいかない場合は、もう一度見てみましょう。

于 2012-07-13T15:03:40.517 に答える
1

これをもう一度試してみましょう:)

編集: die() (または exit()) が必要です。それ以外の場合、PHP は処理を続けます。

login.php

if (empty($_SESSION['login']))
{
   // checking if username is transmitted and matching (same for password)
   if (   ( !empty($_POST['username']) && $_POST['username'] === 'username')
       && ( !empty($_POST['password']) && $_POST['password'] === 'password')
      )
   {
      $_SESSION['login'] = TRUE;
      header('Location:index.php');
      die();
   }      
}
else
{
 // if this matches, we are already loggged in.
 header('Location:index.php');
 die();
}

header('Location:login.php');
die();

logout.php

// check if Session exists, otherwise there is nothing to destroy
if (!empty($_SESSION))
{
unset($_SESSION);
}

header('Location:login.php');
die();

index.php

  session_start();

  // if session doesn't exist we redirect to login
  if(empty($_SESSION['login']))
  {
      header('Location:login.php');
  }
于 2012-07-13T15:23:31.590 に答える
0

私が見る限り、あなたの「ログイン フォーム」は正しくありません。「:」の代わりに「=」を使用する必要があります。(編集:マイナス評価とは何ですか?)

また、AFAIRの場所は次のようにする必要がありますLocation: http://www.example.com/index.php

于 2012-07-13T14:57:48.690 に答える