我正在创建一个管理页面..我需要让这个页面只对某个有用的用户可访问!然后我试图让任何未登录的用户无法访问,因此我使用了 -
if (isset($_SESSION["Username"]) && !isset($_POST["LOGIN"]))
if($_SESSION["Username"] == "sara")
在每个if语句上都会显示一条消息..如果用户没有首先登录,如果他不是管理员,但是不管怎样,即使管理员访问它,第一条消息也会出现..它让它访问页面,它显示表单,但消息仍然显示在页面的底部..我的代码是一团糟,我已经尝试了两天!有人可以帮我吗?我试图添加另一个,但我得到一个错误..这是完整的代码 -
<?php
session_start();
include 'header.php';
if (isset($_SESSION["Username"]) && !isset($_POST["LOGIN"])) {
if($_SESSION["Username"] == "sara") {
$conn = new mysqli($database_host, $database_login, $database_pass, $database_name);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
$sql = "SELECT `cat_id` , `cat_name` FROM categorys";
$result = $conn->query($sql);
}
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
if(isset($_POST['Submit'])) {
switch($_POST['Submit']) {
case 'Submit2':
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
$Thecategory = $_POST["Thecategory"];
$q="INSERT INTO categorys( cat_name) VALUES ('$Thecategory')";
if (mysqli_query($conn, $q)) {
echo "New record created successfully 2222";
} else {
echo "Error: " . $q. "<br>" . mysqli_error($conn);
}
}
break;
case 'Submit1':
$Levelid = $_POST["Levelid"];
$Levelserial = $_POST["Levelserial"];
$word = $_POST["word"];
$Thecategoryid = $_POST["taskOption"];
$picfile = $_POST["picfile"];
$fullword = $_POST["fullword"];
$spelledword= $_POST["spelledword"];
$sql="INSERT INTO questions( level_id, level_serial, q_word,q_cat_id , pic_file, word_file, s_word_file)
VALUES ('$Levelid','$Levelserial', '$word','$Thecategoryid ','$picfile' ,'$fullword','$spelledword')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
break;
}
} else {
echo "
<!DOCTYPE html>
<html>
<form>
//form
</form >
<form method=\"post\">
<label >Level id :</label>
<br>
<input type=\"text\" name=\"Levelid\" ><br>
<label > Level serial:</label>
<br>
<input type=\"text\" name=\"Levelserial\" ><br>
<label > The word is:</label>
<br>
<input type=\"text\" name=\"word\" ><br>
<label >The pic file is:</label>
<br>
<input type=\"text\" name=\"picfile\" v><br>
<label > The full word file :</label>
<br>
<input type=\"text\" name=\"fullword\" ><br>
<label >The spelled word file :</label>
<br>
<input type=\"text\" name=\"spelledword\" ><br>
";
echo"
<div >
<label for=\"The category \">The category </label></br>
<select name=\"taskOption\">
";
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) { ?>
<option value="<?php echo $row['cat_id']; ?>">
<?php echo $row['cat_name']; ?>
</option> <?php } ?>
</select>
<?php } ?>
<br><br>
<?php
echo"
<input type=\"Submit\" value=\"Submit1\" name=\"Submit\">
</form>
</div>
</body>
</html>
";
}
}
}
echo "
<head>
<title>Relogin Please </title>
</head>
<body>
<center>
<br/> <br/>
<div id=\"content1\">
<div id=\"relog\">
<h2 style=\" color:black ; font-size: 25px;\">you're not admin </h2>
<a href=\"login.php\"><img src=\"PIC/NIE7J6OOT.PNG\" ></a>
</div>
</div>
<br/> <br/>
</center>
</body>
";
} else {
echo "
<head>
<title>Relogin Please </title>
</head>
<body>
<center>
<br/> <br/>
<div id=\"content1\">
<div id=\"relog\">
<h2 style=\" color:black ; font-size: 25px;\">youare not admin </h2>
<a href=\"login.php\"><img src=\"PIC/NIE7J6OOT.PNG\"></a>
</div>
</div>
<br/> <br/>
</center>
</body>
";
}
?>
<?php include 'footer.php';?>
我需要发表其他声明,但我不知道在哪里!请有人帮忙!
答案 0 :(得分:0)
此代码不再安全:
如果mypage.php包含此代码:
session_start();
$_SESSION['Username']=='sara';
echo "<a href='http://the.link-to-your-admin_page.php' target='_blank'>link</a>";
如果点击了该链接,则会话管理员1将被带到您的页面,并且会出现编辑按钮。
最安全的方法是在登录后立即设置令牌(这是一个非常简单的步骤)。
例如$token = md5(uniqidsession(rsand(), true)); $_SESSION['token']=$token;
在每个页面的顶部放置如下内容:
if(!isset($_SESSION['token'])){ die('Access Denied');}
if(!isset($_SESSION['Username'])){ die('Access Granted');}
首先检查SESSION中的令牌进位,然后检查用户ID,包括用户的权限级别。但是,只有你知道sara作为管理员,这是一个以防万一的预防措施。这只是一种简单的方法,在开头添加更多的指纹扫描代码,使拦截sessionid变得复杂。