PHP 网站中的重定向循环问题
Redirect loop issue in PHP website
我一直在研究 CS50 的第 7 题,其中我们必须使用 MVC 制作一个金融网站。我完成了该网站,它在我的本地机器上运行得非常好。
但是当我将文件上传到托管(免费)服务的服务器并尝试访问它时,我收到了重定向循环错误。这是它的 link:http://ghazilajpal.byethost6.com/finance/public/
这里是login.php
的代码:
<?php
// configuration
require("../includes/config.php");
// if user reached page via GET (as by clicking a link or via redirect)
if ($_SERVER["REQUEST_METHOD"] == "GET")
{
// render form
render("login_form.php", ["title" => "Log In"]);
}
// else if user reached page via POST (as by submitting a form via POST)
else if ($_SERVER["REQUEST_METHOD"] == "POST")
{
// validate submission
if (empty($_POST["username"]))
{
apologize("You must provide your username.");
}
else if (empty($_POST["password"]))
{
apologize("You must provide your password.");
}
// query database for user
$rows = query("SELECT * FROM users WHERE username = ?", $_POST["username"]);
// if we found user, check password
if (count($rows) == 1)
{
// first (and only) row
$row = $rows[0];
// compare hash of user's input against hash that's in database
if (crypt($_POST["password"], $row["hash"]) == $row["hash"])
{
// remember that user's now logged in by storing user's ID in session
$_SESSION["id"] = $row["id"];
$_SESSION["cash"] = $row["cash"];
// redirect to index.php (portfolio)
redirect("/");
}
}
// else apologize
apologize("Invalid username and/or password.");
}
?>
更新
这里是login_form.php:
<form action="login.php" method="post">
<fieldset>
<div class="form-group">
<input autofocus class="form-control" name="username" placeholder="Username" type="text"/>
</div>
<div class="form-group">
<input class="form-control" name="password" placeholder="Password" type="password"/>
</div>
<div class="form-group">
<button type="submit" class="btn btn-default">Log In</button>
</div>
</fieldset>
</form>
<div>
or <a href="register.php">register</a> for an account
</div>
这是config.php。这也有一个重定向:
<?php
/**
* config.php
*
* Computer Science 50
* Problem Set 7
*
* Configures pages.
*/
// display errors, warnings, and notices
ini_set("display_errors", true);
error_reporting(E_ALL);
// requirements
require("constants.php");
require("functions.php");
// enable sessions
session_start();
// require authentication for all pages except /login.php, /logout.php, and /register.php
if (!in_array($_SERVER["PHP_SELF"], ["/login.php", "/logout.php", "/register.php"]))
{
if (empty($_SESSION["id"]))
{
redirect("login.php");
}
}
?>
我希望它简单易懂。我不知道问题出在哪里,如何解决。
我本可以在 cs50.stackexchange.com 上提问,但已经有一个类似的问题没有答案。
它总是出现在这个代码块中吗?
if (crypt($_POST["password"], $row["hash"]) == $row["hash"])
{
// remember that user's now logged in by storing user's ID in session
$_SESSION["id"] = $row["id"];
$_SESSION["cash"] = $row["cash"];
// redirect to index.php (portfolio)
redirect("/");
}
如果是,那么这里有一个问题。
使用 die() 更改重定向;验证。
并且请提供更多您的意见以澄清更多。
我根据 bhushanRJ 关于使用 die ()
的建议进行了一些调试。并发现问题出在 URL 上。所以使用 /finance/public/login.php
而不是 login.php (其他数组项也是如此)解决了这个问题。
但是 CSS 和 JS 文件没有加载。同样,在模板中修复他们的 URL 解决了这个问题。
出现循环是因为我没有通过输入 "session_start()"
来启动会话
我一直在研究 CS50 的第 7 题,其中我们必须使用 MVC 制作一个金融网站。我完成了该网站,它在我的本地机器上运行得非常好。
但是当我将文件上传到托管(免费)服务的服务器并尝试访问它时,我收到了重定向循环错误。这是它的 link:http://ghazilajpal.byethost6.com/finance/public/
这里是login.php
的代码:
<?php
// configuration
require("../includes/config.php");
// if user reached page via GET (as by clicking a link or via redirect)
if ($_SERVER["REQUEST_METHOD"] == "GET")
{
// render form
render("login_form.php", ["title" => "Log In"]);
}
// else if user reached page via POST (as by submitting a form via POST)
else if ($_SERVER["REQUEST_METHOD"] == "POST")
{
// validate submission
if (empty($_POST["username"]))
{
apologize("You must provide your username.");
}
else if (empty($_POST["password"]))
{
apologize("You must provide your password.");
}
// query database for user
$rows = query("SELECT * FROM users WHERE username = ?", $_POST["username"]);
// if we found user, check password
if (count($rows) == 1)
{
// first (and only) row
$row = $rows[0];
// compare hash of user's input against hash that's in database
if (crypt($_POST["password"], $row["hash"]) == $row["hash"])
{
// remember that user's now logged in by storing user's ID in session
$_SESSION["id"] = $row["id"];
$_SESSION["cash"] = $row["cash"];
// redirect to index.php (portfolio)
redirect("/");
}
}
// else apologize
apologize("Invalid username and/or password.");
}
?>
更新
这里是login_form.php:
<form action="login.php" method="post">
<fieldset>
<div class="form-group">
<input autofocus class="form-control" name="username" placeholder="Username" type="text"/>
</div>
<div class="form-group">
<input class="form-control" name="password" placeholder="Password" type="password"/>
</div>
<div class="form-group">
<button type="submit" class="btn btn-default">Log In</button>
</div>
</fieldset>
</form>
<div>
or <a href="register.php">register</a> for an account
</div>
这是config.php。这也有一个重定向:
<?php
/**
* config.php
*
* Computer Science 50
* Problem Set 7
*
* Configures pages.
*/
// display errors, warnings, and notices
ini_set("display_errors", true);
error_reporting(E_ALL);
// requirements
require("constants.php");
require("functions.php");
// enable sessions
session_start();
// require authentication for all pages except /login.php, /logout.php, and /register.php
if (!in_array($_SERVER["PHP_SELF"], ["/login.php", "/logout.php", "/register.php"]))
{
if (empty($_SESSION["id"]))
{
redirect("login.php");
}
}
?>
我希望它简单易懂。我不知道问题出在哪里,如何解决。
我本可以在 cs50.stackexchange.com 上提问,但已经有一个类似的问题没有答案。
它总是出现在这个代码块中吗?
if (crypt($_POST["password"], $row["hash"]) == $row["hash"])
{
// remember that user's now logged in by storing user's ID in session
$_SESSION["id"] = $row["id"];
$_SESSION["cash"] = $row["cash"];
// redirect to index.php (portfolio)
redirect("/");
}
如果是,那么这里有一个问题。 使用 die() 更改重定向;验证。
并且请提供更多您的意见以澄清更多。
我根据 bhushanRJ 关于使用 die ()
的建议进行了一些调试。并发现问题出在 URL 上。所以使用 /finance/public/login.php
而不是 login.php (其他数组项也是如此)解决了这个问题。
但是 CSS 和 JS 文件没有加载。同样,在模板中修复他们的 URL 解决了这个问题。
出现循环是因为我没有通过输入 "session_start()"
来启动会话