0

目前我有一个非常基本的管理员登录系统。我可以通过我的 admin_login.php 页面登录,该页面有一个来自我的 login.php 页面的脚本,我可以从 admin_control_panel.php 更新记录。我主要担心的是任何人都可以直接在地址栏中输入这些 URL 并绕过登录过程。

目前我的代码不是基于安全性的(我只是想让我的所有基本功能和特性启动并运行,然后我将专注于安全性)。

我知道我必须使用会话来跟踪用户是否登录,但我对我将在哪里实现这些会话感到有点困惑。

我的问题是:我在哪些页面中包含代码?,我在页面的哪个位置包含这些会话?我在这些文件中包含什么?

我想要的是能够在用户未登录的情况下将用户重定向回登录页面。

admin_login.php

<?php 

$dbhost = 'x';
$dbuser = 'x';
$dbpass = 'x';

$con = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $con )
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db('x');

?>

<html>

<head>
<link rel="stylesheet" type="text/css" href="css/master.css">
</head>

<body>

<form method="post" action="login.php">

User:<input name="username" type="text">
Pass:<input name="password" type="password">

<input name="submit" type="submit" value="Submit">

</form>

</body>

</html>

登录.php

<?php

$dbhost = 'x';
$dbuser = 'x';
$dbpass = 'x';

$con = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $con )
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db('x', $con);

$query = "SELECT username FROM members ".
         "WHERE username=\"$_POST[username]\" ".
         "AND password = \"$_POST[password]\"";

$result = mysql_query($query, $con);         

mysql_data_seek($result, 0);

if (mysql_num_rows($result) == 0)
    header("Location: admin_login.php");
 else   
    header("Location: admin_control_panel.php");
?>

admin_control_panel.php

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 3</title>
</head>

<body>

<?php

include('./upload.html');

?>

</body>

</html>

先感谢您。

4

2 回答 2

1

最好的方法是使用sessions. 在 login.php 中做这样的事情

if (mysql_num_rows($result) == 0) {
    header("Location: admin_login.php");
} else   {
    header("Location: admin_control_panel.php");
    session_start();
    $_SESSION['user'] = $_POST['username'];
}

现在在文件顶部的 admin_control_panel.php 中,只需添加此 php 代码以检查 $_SESSION['user'] 是否存在。

<?php
if (! isset($_SESSION['user'])) {
  header("Location: admin_login.php");
}
?>

基本上,如果登录正确,您将使用此代码创建与用户数据的会话。如果不是,他将默认被重定向到登录页面。现在当有人试图访问 admin_control_panel 页面时,我们将首先检查是否设置了会话。如果是真的,他可以访问该页面,如果不是,他将被重定向到登录。

有关会话的更多信息: PHP.net 会话手册w3schools.com 会话手册

*笔记。要注销,您必须销毁会话,才能使用该session_destroy();功能。

于 2013-02-17T15:02:18.663 回答
0

包括session_start();在你的脚本的顶部,然后你会做这样的事情:

if (mysql_num_rows($result) == 0){
    header("Location: admin_login.php");
} else {
    $_SESSION['permission'] = 'admin';   
    header("Location: admin_control_panel.php");
}

然后,您需要实现一个功能来检查管理员是否已登录。

function verifyAdmin() {
   if(!isset($_SESSION['permission']) || $_SESSION['permission'] != 'admin'){
        header("Location: admin_login.php");
    }
}

现在,在每个管理页面的顶部添加verifyAdmin();. 请记住将session_start();使用会话添加到任何页面的顶部。

于 2013-02-17T14:45:56.907 回答