0

PHP と mysql を使用して簡単なログインおよびログアウト スクリプトを作成していますが、login.php またはインデックス ファイルを入力しようとすると、次のようなエラー メッセージが表示されます。決して完了しない方法で、このアドレスへのリクエストをリダイレクトしています。

この問題は、Cookie の受け入れを無効にしたり拒否したりすることで発生することがあります。

index.php

<?php
require_once('connect.php');
ob_start();
session_start();
//checked wether the user is loged in  or not 

$user = $_SESSION['username'];

if(!isset($_SESSION['username']))
{
    $user = $_SESSION['username'];
    header("Location: index.php");
    exit();
}
else
{

    header("Location: home.php");
}





// login script
if(isset($_POST['username'])&& isset($_POST['password']))
{
    $user_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['username']);
    $user_password = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['password']);
    $md5password = md5($user_password);
    $sql = mysql_query("SELECT id FROM members WHERE username = '".$user_login."' AND password = '".$user_password."'") or die ("could not select from database");

    $userCount = mysql_num_rows($sql);
    if($userCount ==1)
    {
        while($row = mysql_fetch_array($sql))
        {

            $id = $row['id'];
        }

        $_SESSION['id'] = $id;
        $_SESSION['username'] = $user_login;
        $_SESSION['password'] = $user_password;
        header("Location: index.php");
        exit();
    }
    else
    {
         echo "that info is incorrect";
         exit();
    }
}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

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

<input name="username" type="text" value="username" size="32" />
<input name="pass" type="password" value="password" size="32" />
<input name="login" type="submit" value="login" />

</form>

</body>
</html>
<?php  ob_end_flush(); ?>

home.php

<?php
//home.php
session_start();
$user = $_SESSION['username'];
if(!isset($_SESSION['username']))
{
    header("Location: index.php");
    exit();
}
else
{

    echo "hi $user you are loged in //Welcome to our website <a href=\"logout.php\">Logout</a>";


}


?>

logout.php

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

?>
4

3 に答える 3

2

まず、index.php では「//ユーザーがログインしているかどうかを確認する」必要はありません。home.php で確認する必要があります。このコードはエラーの原因です:「ページが正しくリダイレ​​クトされていません Firefox は、サーバーがこのアドレスへのリクエストを決して完了しない方法でリダイレクトしていることを検出しました」。繰り返しました(セッションは作成されていませんが、チェックされています...)。

次に、home.php で、session_start() メソッドを記述する必要があります。これは、セッションを使用するときに必要なコードです。

私のコードを参照してください:

index.php

<?php
ob_start();
session_start();

//check session is existed    
if (isset($_SESSION['username'])) {
    header("Location: home.php");
}

if (isset($_POST['username']) && isset($_POST['password'])) {
    $user_login = $_POST['username'];
    $user_password = $_POST['password'];

    if ($user_login == 'namluu' && $user_password =='123456') {
        $_SESSION['username'] = $user_login;
        $_SESSION['password'] = $user_password;
        header("Location: home.php");
        exit();
    } else {
        echo 'Infor not correct';
        exit();
    }
}
?>
<html>
  <head></head>
  <body>
    <form action="index.php" method="post">
      <input type="text" name="username" />
      <input type="text" name="password" />
      <input type="submit" name="login" value="login" />
    </form>
  </body>
</html>
<?php
  ob_end_flush();
?>

home.php

<?php
session_start();
//home.php
$user = $_SESSION['username'];
if(!isset($_SESSION['username']))
{
    header("Location: index.php");
    exit();
}
else
{
    echo "hi $user you are loged in //Welcome to our website <a href=\"logout.php\">Logout</a>";
}
?>
于 2013-03-07T15:34:25.360 に答える
2

'session_start();' の後、これindex.phpを if 条件の上に置く必要があります。

if($_SESSION['username'])
{
    header("Location: home.php");
    exit();
}

while ループでは、header("Location: home.php");代わりにheader("Location: index.php");

home.phpphpタグを開いた後に一番上に置くべきページでは

ob_start();
session_start();

それがうまくいくことを願っています。

+++++++++++++++++++++++++++++++++++++++++++

このコード index.phpを使用してください

<?php
require_once('connect.php');
ob_start();
session_start();
//checked wether the user is loged in  or not 

$user = $_SESSION['username'];

if($_SESSION['username'])
{
    $user = $_SESSION['username'];
    header("Location: home.php");
    exit();
}

// login script
if(isset($_POST['username'])&& isset($_POST['password']))
{
    $user_login = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['username']);
    $user_password = preg_replace('#[^A-Za-z0-9]#i', '', $_POST['password']);
    $md5password = md5($user_password);
    $sql = mysql_query("SELECT id FROM members WHERE username = '".$user_login."' AND password = '".$user_password."'") or die ("could not select from database");

    $userCount = mysql_num_rows($sql);
    if($userCount ==1)
    {
        while($row = mysql_fetch_array($sql))
        {

            $id = $row['id'];
        }

        $_SESSION['id'] = $id;
        $_SESSION['username'] = $user_login;
        $_SESSION['password'] = $user_password;
        header("Location: home.php");
        exit();
    }
    else
    {
         echo "that info is incorrect";
         exit();
    }
}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

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

<input name="username" type="text" value="username" size="32" />
<input name="pass" type="password" value="password" size="32" />
<input name="login" type="submit" value="login" />

</form>

</body>
</html>
<?php  ob_end_flush(); ?>

home.php

<?php
ob_start();
session_start();

//home.php
$user = $_SESSION['username'];
if(!isset($_SESSION['username']))
{
    header("Location: index.php");
    exit();
}
else
{

    echo "hi $user you are loged in //Welcome to our website <a href=\"logout.php\">Logout</a>";


}
?>

logout.php正しい

于 2013-03-07T15:07:39.337 に答える
1

これはsession_start()、home.php と index.php の間で無限ループが発生していることを意味します。

現在、index.php にアクセスすると、セッションが認識され、ユーザーが home.php にリダイレクトされます。home.phpには存在session_start()しないため、セッションを認識せず、ユーザーを index.php にリダイレクトします。したがって、無限ループがあります。

于 2013-03-07T15:00:48.310 に答える