【发布时间】:2014-09-06 12:05:20
【问题描述】:
我在使用 PHP 会话时遇到了一些困难。 这样做的目的是防止用户使用直接 URL 访问管理员面板/页面。
我创建了一个登录表单并且效果很好 (login.php) 正确输入用户名和密码后,登录表单会将用户带到管理面板(admin.php)
但是,当我将以下脚本 PHP 添加到 (admin.php) 页面时,它不起作用。 当我在登录页面上输入用户名和密码时,它总是失败并重定向我到 login.php
admin.php 上的脚本用于阻止用户访问该页面,如果 会话变量未设置
非常感谢任何帮助:)
<link rel="stylesheet" type="text/css" href="admin_panel.css" media="all">
</head>
<body>
<form method="post">
<input type="text" name="user_name" placeholder="Username" required="required" />
<input type="password" name="user_pass" placeholder="Password" required="required" />
<button type="submit" class="btn btn-primary btn-block btn-large" name="login">Let me in.</button>
</form>
</div>
</body>
//===================================== login.php
<?php
include("includes.php");
if(isset($_POST['login'])) {
echo $user_name = mysql_real_escape_string ($_POST['user_name']);
echo $user_pass = mysql_real_escape_string ($_POST['user_pass']);
$encrypt = md5($user_pass);
$select_user = "select * from users where user_name= '$user_name' AND user_password = '$user_pass'";
$run_user = mysql_query($select_user);
if(mysql_num_rows($run_user)>0){ // what does this function DO?
$_SESSISON['user_name'] =$user_name;
echo "<script> window.open('admin_panel.php?logged=You have logged in','_self' )</script>";
}
else {
echo "<script> alert('Wrong details')</script>";
} }
?>
</html
// admin.php script ====================
<?php
session_start();
if(!isset($_SESSION['user_name'])) {
echo "<script>window.open('login.php','_self')</script>";
}
else { // ELSE CLOSED BOTTOM OF THE PAGE
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Admin page</title>
<link rel="stylesheet" type="text/css" href="admin_panel.css" media="all">
</head>
<body>
<a href="home.php?view_comments"> comments(0)</a>
<a href="admin_panel.php?insert_post"> Insert New Post </a>
<a href="logout.php"> Admin Logout </a>
<?php
if(isset($_GET['insert_cat'])) {
include("insert_cat.php");
}
if(isset($_GET['insert_post'])) {
include("insert_post.php");
}
?>
</body>
<?php } ?> // CLOSE ELSE
</html>
【问题讨论】:
-
你能发布你的 login.php 代码吗? @andrew 如果您禁用 JavaScript,login.php 页面将无法打开,管理部分本身位于 else 语句中,因此如果未设置
user_name会话,它将不会运行。 -
Erhm,如何通过简单地禁用 javscript 来“入侵”该页面?没有 javascript,您根本无法登录(因为会话变量永远不会被设置;取决于到目前为止我们没有看到的 login.php)。
-
@MrTux 好吧,也许“黑客”是夸大其词,但它肯定会让我看到他不想要的页面
-
@andrew:不,你为什么这么认为?
-
@MrTux 啊。我从来没有注意到
else{应该更彻底地阅读问题:p