php - 防止用户在不使用会话变量 PHP 登录的情况下停止在不同选项卡中的同一浏览器上访问另一个用户页面
问题描述
假设,我有一个位于https://www.example.com/a/login.php的登录页面。成功登录后,用户重定向到https://www.example.com/a/admin.php。我在https://www.example.com/b/login.php有另一个登录页面,成功登录后用户重定向到https://www.example.com/b/admin.php。现在假设,在浏览器中,用户成功登录到https://www.example.com/a/login.php。并重定向到 admin.php 页面。如果另一个用户试图直接访问页面https://www.example.com/b/admin.php而没有登录页面在同一浏览器中的另一个选项卡中,那么他很容易绕过登录并到达 admin.php 页面。我的示例代码是:
登录.php
<?php
session_start();
// if user successful login
$_SESSION['user_id'] = $users_id
// we redirect user to member page
if (isset($_SESSION['user_id']){
header("Location:admin.php");
}else{
header("Location:login.php");
}
?>
管理员.php
<?php
session_start();
if (!isset($_SESSION['user_id']){
header("Location:login.php");
}
echo "welcom user : {$_SESSION['user_id']}";
?>
有什么办法可以让第二个用户尝试在同一浏览器的另一个选项卡中访问https://www.example.com/b/admin.php,然后他将被重定向到https://www.example。 com/b/login.php?
解决方案
尝试设置另一个$_SESSION
变量.. 所以像这样:
<?php
session_start();
// if user successful login
$_SESSION['user_id'] = $users_id
$_SESSION['url'] = "a"; // a if https://www.example.com/a/login.php, b if https://www.example.com/b/login.php
// we redirect user to member page
if (isset($_SESSION['user_id']){
header("Location:admin.php");
}else{
header("Location:login.php");
}
?>
在您的https://www.example.com/a/admin.php,您应该像这样设置它;
<?php
session_start();
if (!isset($_SESSION['user_id'])){
header("Location:login.php");
}
elseif (!isset($_SESSION['url'])){
header("Location:login.php");
}
elseif ($_SESSION['url'] != "a"){
header("Location:login.php");
}
echo "welcome user : {$_SESSION['user_id']}";
?>
然后在你的https://www.example.com/b/admin.php,你应该这样设置它;
<?php
session_start();
if (!isset($_SESSION['user_id'])){
header("Location:login.php");
}
elseif (!isset($_SESSION['url'])){
header("Location:login.php");
}
elseif ($_SESSION['url'] != "b"){
header("Location:login.php");
}
echo "welcome user : {$_SESSION['user_id']}";
?>
希望这对你有帮助!
推荐阅读
- python - Python命名空间子包依赖另一个子包安装失败
- java - 如何从 Selenium Web Driver 中的无序列表中选择特定的列表项
- c++ - Dsi Homebrew 从 sdcard 加载 bmp
- reverse-proxy - 为什么使用反向代理访问 MongoDB Atlas 数据库
- angularjs - 如何基于angularjs中的其他单选按钮启用单选按钮
- javascript - 通过 Javascript 生成随机链接进行在线调查
- python - 当列表值与 Pyspark 数据框中列值的子字符串匹配时填充新列
- python - 如何处理 Python 或 Django 中的错误“预期的 str、字节或 os.PathLike 对象,而不是 InMemoryUploadedFile”?
- elasticsearch - Elasticsearch 在搜索期间为字段起别名
- python - SQL Alchemy 过滤