我有两个.php文件。所有的HTML和PHP,没有SQL,也不需要/使用它。一个是登录页面,另一个是目的地。当我输入我设置的登录详细信息时,我无法到达目的地。这是两个页面的代码:
登录:
<!DOCTYPE html>
(php tag here can't type it)
session_start();
$username="testu";
$password="testp";
$_SESSION['logged_in']=false;
if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] == true) {
header("Location: dest.php");
exit;
}
if (isset($_POST['user']) && isset($_POST['pass'])) {
if ($_POST['user'] == $username && $_POST['pass'] == $password) {
$_SESSION['logged_in'] = true;
header("Location: dest.php");
exit;
}
}
?>
<html lang="en">
<head>
<title>A title</title>
</head>
<body>
<form action="dest.php" method="post" style="font- family:calibri;position:absolute;top:40%;left:35%;">
Username: <input type="text" name="user"/><br><br>
Password: <input type="password" name="pass" style="position:relative;left:5px;"/><br><br><br>
<input type="submit" value="Submit" style="position:relative;left:115px;"/>
</form>
</body>
</html>
目的地:
<!DOCTYPE html>
(php tag here)
session_start();
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] == false) {
header("Location: login.php");
exit;
}
?>
<html lang="en">
<head>
<title>A title</title>
</head>
<body>
<a href="login.php">Log out</a>
</body>
</html>
我注意到当我在目标文件上注释掉php代码时,我可以访问dest.php。问题是,我可以访问任何登录详细信息,或者根本没有。它没有任何作用,或任何有效的东西。如何获得我设定的工作细节?我觉得问题出在登录页面脚本中。非常感谢能够帮助我解决这个问题的任何人。
在此完全解决了这个问题:PHP login authentication not working这一点都不重复,Fred-ii-标记为一个人显然没有注意他要求的代码。他还从我的帖子中删除了他的评论。
答案 0 :(得分:1)
来自http://php.net/manual/en/function.session-start.php
注意:
要使用基于cookie的会话,必须在向浏览器输出任何内容之前调用session_start()。
在代码中移动session_start()
。例如,
<?php
session_start();
?><!DOCTYPE html>
<!-- and the rest of your code here... -->
答案 1 :(得分:0)
您的问题是session_start();
。你必须将它放在你处理会话的每个页面之上。
session_start()创建会话或恢复当前会话 通过GET或POST请求传递的会话标识符,或通过 cookie中。
<?php
session_start(); //has to be on top of every site you use sessions
$username = "testu";
$password = "testp";
$_SESSION['logged_in'] = false;
if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] == true) {
header("Location: dest.php");
}
if (isset($_POST['username']) && isset($_POST['password'])) {
if ($_POST['username'] == $username && $_POST['password'] == $password) {
$_SESSION['logged_in'] = true;
header("Location: dest.php");
}
}
?>