我是PHP的新手,所以我希望有一些可以提供帮助。 我有一个工作正常的登录页面。 我的问题是,如果你知道网址,你仍然可以访问子页面。
这就是我在登录页面上所说的内容
<body>
<?php
if(@!empty($_SESSION['acesses'])) {
echo '<script language="JavaScript">{ location.href="subpage.php"; self.focus(); }</script>';
}
?>
<div id="loginWrapper">
<div id="login">
<form name="loginform" action="<?php $_SERVER['REQUEST_URI']; ?>" method="post" autocomplete="on">
<fieldset id="input">
<h1>Log Ind</h1>
<?php
if(isset($_POST['submit'])) {
echo '<div class="errorBox">';
$username = mysqli_escape_string($conn,$_POST['username']);
$password = mysqli_escape_string($conn,$_POST['password']);
if(!empty($username) && !empty($password)) {
$query = mysqli_query($conn,"SELECT * FROM member WHERE username='$username' LIMIT 1");
$result = mysqli_fetch_array($query);
if($result['username'] == $username && $result['password'] == $password) {
//Sesstion Information
$_SESSION['acesses'] = $result['id'];
echo '<script language="JavaScript">{ location.href="subpage.php"; self.focus(); }</script>';
}else {
echo 'Brugernavnet eller Adganskoden stemmer ikke overens.';
}
}
echo '</div>';
}
?>
<label for="username"> Dit Brugernavn</label>
<input name="username" id="user" type="text" placeholder="Brugernavn">
<label for="password"> Dit password </label>
<input name="password" id="pass" type="password" placeholder="Password">
<input name="submit" type="submit" value="Log ind" />
</fieldset>
</form>
..........
这就是我在子页面顶部所说的内容
<?php
session_start();
if(!empty($_SESSION['acesses'])) {
echo '<script language="JavaScript">{ location.href="login.php"; self.focus(); }</script>';
}
?>
<!doctype html>
<html lang="en">
<head>
答案 0 :(得分:3)
如果用户未登录,您可以重定向用户,反之亦然。
if (!empty($_SESSION['acesses'])){
header("Location: yourpage.php"); // or whatever page you like
exit();
}
else{
// your code for when user is logged in
}
不要使用JavaScript重定向,尤其是在处理会话时。用户只需在浏览器中关闭JavaScript,重定向就不再有效了。
答案 1 :(得分:1)
首先,如果用户未登录,您的子页面会重定向。其次,请使用HTTP来代替javascript重定向:
<?php
session_start();
if(!isset($_SESSION['acesses']) || empty($_SESSION['acesses'])) {
Header("Location: index.php");
}
?>
答案 2 :(得分:1)
您可以在要保护的页面中使用以下逻辑:
if(isset($_SESSION['acesses']) && !empty($_SESSION['acesses'])){
// give access
}
else{
// don't give access
}
并为您的所有网页执行相同操作。
旁注:您为登录页面发布的代码不包含session_start();
- 如果它不在您的工作代码中,请将其包含在内。它必须位于使用sessions的所有页面内。
<body>
<?php
session_start();
if(@!empty($_SESSION['acesses'])) {
echo '<script language="JavaScript">{ location.href="subpage.php"; self.focus(); }</script>';
}
?>
您还应考虑在代码中嵌入<noscript>Please enable Javascript</noscript>
,并在用户未启用时重定向。
重要的旁注 :我注意到您以纯文本格式存储密码。 非常气馁 。
如果您的PHP版本为5.5,则可以使用password_hash()
功能,或crypt()
或bcrypt()
以下是您可以查看的一些资源:
关于使用Javascript:
如果您绝对想在代码中使用JS,可以使用以下逻辑:
<?php
echo "<div id=\"hide\">This line is hidden in PHP and will appear once JS is enabled.</div>";
// you can include your JS anywhere in here and will execute once the user enables JS.
?>
<body>
<div class="hide_class">This is hidden using a CSS class and will appear once JS is enabled.</div>
<noscript>
Please enable Javascript to view the content of this page, thank you.
<style>
#hide {
display:none;
}
.hide_class {
display:none;
}
</style>
</noscript>
</body>
答案 3 :(得分:0)
首先,您应该使用PHP-PDO来防止SQL注入攻击。
您的代码在子页面上也是错误的。您应该查看变量 acesses ,如下例所示。
if(!isset($_SESSION['acesses']) or empty($_SESSION['acesses'])) {
echo '<script language="JavaScript">{ location.href="login.php"; self.focus(); }</script>';
}