你好,Stackoverflowers
我是 PHP 新手,我正在尝试为我的测试页创建一个成员(member)区域。我已经成功创建了注册和登录页面,但是现在当我更改代码时,如果我正确登录,它会将我重定向到一个页面,如果我使用错误的信息登录,它会将我发送到另一个页面。但是,如果您在地址栏中键入位置,则可以访问成员(member)区域。现在,这就是我需要帮助的地方,当有人尝试在未登录的情况下访问该位置时,它应该显示“访问被拒绝”,但是当您登录时,它应该将您重定向到成员(member)区域并显示所有内容。
这是我的代码:
登录.php
<?php
session_start();
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'Data';
mysql_connect($host, $user, $pass);
mysql_select_db($db);
if(isset($_POST['username'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM Project WHERE username='$username' AND password='$password' LIMIT 1";
$res = mysql_query($sql);
if (mysql_num_rows($res) == 1){
header("Location: loggedin.php");
exit();
} else {
echo 'Användarnamn eller lösenord stämmer ej med informationen i databasen, var snäll försök igen <br>';
echo '<a href="login.php">Gå tillbaka</a> Eller <a href="signup.php">Registrera dig</a>';
exit();
}
}
?>
<html>
<head>
<meta charset="UTF-8">
<title>Logga in</title>
<script src="js/prefixfree.min.js"></script>
</head>
<body>
<div class="body"></div>
<div class="grad"></div>
<div class="wrapper">
<div class="header">
<div>bababa<span>bababa</span></div>
</div>
<br>
<div class="login">
<form method="post" action="login.php">
<input type="text" placeholder="Användarnamn" name="username" required><br>
<input type="password" placeholder="Lösenord" name="password" required><br>
<input type="submit" value="Logga in">
</form>
</div>
</div>
<script src='http://codepen.io/assets/libs/fullpage/jquery.js'></script>
</body>
</html>
注册.php
<!DOCTYPE HTML>
<html lang="sv">
<head>
<link href='http://fonts.googleapis.com/css?family=Oswald' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'>
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script type="text/javascript" >
$(".name").focus(function(){
$(".name-help").slideDown(500);
}).blur(function(){
$(".name-help").slideUp(500);
});
$(".email").focus(function(){
$(".email-help").slideDown(500);
}).blur(function(){
$(".email-help").slideUp(500);
});
</script>
</head>
<div class="wrapper">
<h1>Registrera er här</h1>
<p>Detta är ett test-formulär för Webbutvecklingsprojektet. Skriv ditt namn här
under och om allt funkar rätt skall systemet lagra ditt namn i en MySQL databas.</p>
<form class="form" name="form" method="post" action="add.php">
<input type="text" id="username" name="username" placeholder="Användarnamn" required>
<input type="password" id="password" name="password" placeholder="Lösenord" required>
<input type="email" id="email" name="email" placeholder="E-mail" required>
<input type="submit" class="submit" value="Registrera dig">
</form>
<h3>
Allmänt & regler:
</h3>
<ul>
<li>Maximalt 2GB Lagring</li>
<li>Du måste skriva för- och efternamn</li>
<li>Databasen lagrar bara upp till 60 användare</li>
</ul>
</div>
<p class="optimize">
</p>
</html>
最后:login.php
<?php
session_start();
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'Data';
mysql_connect($host, $user, $pass);
mysql_select_db($db);
if(!isset($_SESSION['username'])) {
die("Please login");
} else {
echo 'Du är inloggad';
}
?>
FTR:我尝试了 if isset,但即使我正确登录,也会显示相同的消息:请登录,我应该如何解决此问题?
我是这方面的新手,所以请帮助我一点
谢谢!
最佳答案
您可以使用 Cookies
或 SESSION
来执行此操作。
当用户通过身份验证后,在重定向到主页之前,您应该设置一个 session 变量,如下所示:$_SESSION['id']=$user_id;
。如果你想设置COOKIES
,以便用户即使在关闭浏览器后也可以直接访问他的帐户,你可以这样设置 setcookie($cookie_name, $cookie_value, time() + (86400 * 30),“/”);//1 天
。
因此,现在在每个页面的开头,您需要启动 session session_start()
以获取您在登录期间设置的 session
值。
如果 session 中存在任何用户信息的user_id
,它将自动使用该信息访问页面。
现在考虑到您希望用户在尝试访问主页时自动重定向到登录页面/访问被拒绝。您可以通过检查 session user_info 或 cookie 是否存在来做到这一点...如果不存在' t 根据您的需要将他重定向到登录页面或任何错误页面...
在您的代码中,在 header("Location:login.php");
之前创建一个 session $_SESSION['username'] = $username;
。请记住每个页面上的 session_start()
,其中将使用 $_SESSION
值..
关于php - 页面仅在登录后才可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28640020/