首页 > 解决方案 > 防止用户在不使用会话变量 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

标签: phpsession

解决方案


尝试设置另一个$_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']}";
?>

希望这对你有帮助!


推荐阅读