Php 在同一浏览器中限制用户访问

Php 在同一浏览器中限制用户访问,php,login,restrictions,Php,Login,Restrictions,我正在制作一个基于php的应用程序。当两个用户从同一浏览器的不同选项卡登录时,他们可以访问彼此的页面。如何预防这种情况?我认为有4种解决方案: 您可以尝试为该窗口(在本例中为tab)指定一个名称,以便使用JavaScript检测特殊窗口: if(window.name==4711) {...} 将会话与GET参数一起使用,而不是与cookie一起使用 使用随机子域和在该子域上运行的普通cookie 使用普通cookie,该cookie仅限于使用mod_rewrite时实际不存在的“虚拟”目录

我正在制作一个基于php的应用程序。当两个用户从同一浏览器的不同选项卡登录时,他们可以访问彼此的页面。如何预防这种情况?

我认为有4种解决方案:

  • 您可以尝试为该窗口(在本例中为tab)指定一个名称,以便使用JavaScript检测特殊窗口:

    if(window.name==4711) {...}
    
  • 将会话与GET参数一起使用,而不是与cookie一起使用

  • 使用随机子域和在该子域上运行的普通cookie

  • 使用普通cookie,该cookie仅限于使用mod_rewrite时实际不存在的“虚拟”目录


  • 使用
    $\u SESSION
    $\u COOKIE
    存储用户登录并更新数据库时创建的生成密钥,以便用户更改页面时,您可以根据生成的密钥访问其信息。此外,您可能需要创建一个简单的
    函数
    来检查键,然后为页面使用另一个函数,如果它类似于菜单栏或登录框,请将其包装在
    if语句

    if(checkUser($_COOKIE['MYSID'])){
       // User is logged in so show whatever
    } else {
       // Login box here
    }
    

    在打开浏览器选项卡时,使用
    window.name
    属性或为每个用户设置cookie

    您的应用程序没有检查用户当前是否已登录,所以您需要做什么 首先,当用户输入凭据并登录时,请设置会话变量

    $_SESSION['logged_in'] = "true";
    
    然后,您必须对索引页面进行一些修改,如下页面开头所示

    <?
    if($_SESSION['logged_in']=='true'){
    header('location:USERS_SPECIFIC_PAGE_AFTER_LOGIN.EXT')
    }
    else{
    header('location:login_page.ext');
    }
    
    ?>
    
    
    
    为什么?除了让用户为每个请求输入用户名/密码之外,我不知道这是可能的,更不实际。标题中的“限制用户访问”有疑问——“可以访问”??你真正需要做的是确保你不允许浏览器登录两个不同的用户。在这方面,web应用程序通常就是这样工作的。也就是说,如果一个用户试图访问登录屏幕或表单,请先让他们注销,或者在请求登录页面或表单时自动注销另一个用户。为什么两个用户在同一浏览器中使用不同的选项卡?站点的Cookie存在于整个浏览器会话中,而不是每个选项卡中。另外,如果我决定点击另一个标签怎么办?@Rocket-有可能(现在我想起来了)有两个不同的用户在不同的“应用程序/路径上下文”中登录到同一个浏览器,但在“共享站点上下文”中。换句话说,如果您的应用程序位于
    http://example.com/rocketsapp
    我的应用程序位于
    http://awesome.example.com/jaredsapp
    ,如果会话与“登录”标志或检查重叠,并且会话cookie设置为子域而不是路径扩展,cookie/会话理论上可以识别可以访问这两个功能的用户。有可能。。。这显然是一个缺陷。这将如何阻止某人只选择另一个选项卡?我知道问题是这样的,即搜索一个解决方案以使用多个帐户登录一个浏览器。这是不可能的基于cookie的会话。@JaredFarrish:这个概念使整个问题变得毫无意义。我想知道为什么OP觉得这是一个他需要解决的问题。@Rocket-是的,我知道。见我的其他评论。我认为这种担心是“虚假的”,就像担心一些“不真实”的东西或者有一个糟糕的身份验证过程一样。@JaredFarrish:另外,两个用户如何在同一个浏览器中同时登录到不同的标签页?这怎么可能呢?Cookie没有绑定到标签页或窗口,好吧。仍然不能阻止某人单击另一个选项卡。你是对的,cookie不仅仅基于一个选项卡或窗口,但是如果你使用cookie作为登录源,并在网站中添加了一个检查cookie是否存在的部分,因此不允许其他人登录会阻止他的请求。缺陷在于,很显然,OP已经构建了一个系统,允许多个用户从同一个浏览器会话登录。解决这个问题,不要为一个本不应该发生的问题实施复杂的“修复”。国际海事组织。