php - 通过 url 直接用户访问页面
问题描述
嗨,我想使用下面的 php 代码阻止对我的页面的直接 URL 访问,但如果我将它包含到我的表单中,即使在输入我的用户名和密码后我也无法登录,这就像我被锁定在我的应用程序之外。有人可以帮忙吗
那是我的 security.php 文件
<?php
if(!isset ($_SESSION['user']))
{
header ('location:user_login.php');
}
?>
和用户登录文件
<?php
if (isset($_POST['btnLogin']))
{
$user = $_POST['user'];
$password = $_POST['password'];
//sql injection security
$user = mysqli_real_escape_string($con,$user);
$password = mysqli_real_escape_string($con,$password);
//select database
$db = mysqli_select_db($con,'nesthet');
$query = "SELECT * from users where user='$user' AND password='$password'";
$query_run = mysqli_query($con,$query);
$role = mysqli_fetch_array($query_run);
//user redirection base on user role
if($role['role'] == "admin"){
session_start();
$_SESSION['user'] = $user;
header('location: admin.php');
}
else if($role['role'] == "user") {
$_SESSION['user'] = $user;
header('location: mdi_parent.php');
}
else {
$_SESSION['status'] = "Username or password is invalid";
header('location: index.php');
}
}
?>
解决方案
在 security.php 中,您应该在使用 $_SESSION 变量之前执行 session_start()
<?php
if(!isset ($_SESSION['user']))
{
header ('location:user_login.php');
}
?>
在您的代码中,您只需在角色为管理员时启动会话
if($role['role'] == "admin"){
session_start();
$_SESSION['user'] = $user;
header('location: admin.php');
}
else if($role['role'] == "user") {
$_SESSION['user'] = $user;
header('location: mdi_parent.php');
}
else {
$_SESSION['status'] = "Username or password is invalid";
header('location: index.php');
}
推荐阅读
- postgresql - 尝试添加数据库时出现 Qt PostgreSQL 链接器错误
- excel - 如何将列值转换为vba宏中的行
- reactjs - 最大的内容绘画是一个大盖茨比背景图像,非常慢
- java - 使用设计模式避免 switch-case 条件
- angular - 将默认蓝色标记更改为我自己的图标标记,mapbox angular
- oracle - Oracle 自治数据库 - 使用了过多的存储?
- c# - 值之外的 Azure Blob 触发连接
- php - 在同一页面上登录/注册
- python - 调度程序工作时如何执行多个任务?
- codeeffects - 如何在 CodeEffects 规则编辑器中使用聚合函数?