【问题标题】:Prevent users from opening multiple instance of same website PHP防止用户打开同一网站 PHP 的多个实例
【发布时间】:2016-10-16 06:31:13
【问题描述】:

我的网站只需要一个可访问的标签。当他尝试在新标签中打开,甚至尝试在新标签中复制和粘贴 url 时,应该清除用户的会话并从应用程序中注销。

有几个原因,

  1. 当用户打开连接到同一应用程序的新选项卡时 - 会话 ID 相同。
  2. 假设此用户从第一个选项卡到达应用程序流中的页面 X。
  3. 当他打开第二个选项卡时,他可能处于以下情况之一 - 取决于打开第二个选项卡的方式 - 新选项卡、重复选项卡(这会将 URL 复制到新打开的选项卡)或新会话。 以上所有将“混淆”服务器关于应用程序的下一个有效状态是什么,并且可以在他/她不知情的情况下覆盖在不同选项卡中输入的数据 我想要的是防止单个用户在同一个会话中有多个选项卡,即每个用户每个会话只有一个选项卡/窗口。

登录后在dashboard.php中包含以下脚本

<script>
$(document).ready(function()
{
    if(typeof(Storage) !== "undefined") 
    {
        if (sessionStorage.pagecount) 
        {
            sessionStorage.removeItem('pagecount');
            window.location='logout.php';
        } 
        else
        {
            sessionStorage.pagecount = 1;
        }
    } 
    else 
    {
        sessionStorage.removeItem('pagecount');
        window.location='logout.php';
    }    
});

应用程序其他子页面中的以下代码

<script>
$(document).ready(function()
{       
    if(typeof(Storage) !== "undefined") 
    {
        if (sessionStorage.pagecount) 
        {
            sessionStorage.pagecount = Number(sessionStorage.pagecount) + 1;
        } 
        else 
        {
            sessionStorage.removeItem('pagecount');
            window.location='logout.php';
        }
    } 
    else 
    {
        sessionStorage.removeItem('pagecount');
        window.location='logout.php';
    }   
});
</script>

【问题讨论】:

  • 但对解决方案不满意。我该如何实施? @AngelosChalaris
  • 阅读我链接到的问题。大多数 aswers 建议要么这是一种不好的做法,要么有一种解决方法,但对于您有兴趣实施的那种事情来说,这不是一个非常简单的解决方案。如果您在我所链接的问题的答案之一的特定实施方面需要帮助,请尝试自己实施并查看您可能遇到的问题,然后尝试使用更多详细信息更新您的问题。
  • 您想要的是服务器端功能。一些网站能够使用 Websockets 或类似技术来做到这一点,因此服务器可以将注销实时推送到浏览器。任何其他方法都意味着篡改浏览器的正常行为,这可能会给最终用户带来一些安全问题/问题。
  • a) 你为什么还要考虑这个?有人需要这个做什么? b)我很确定这会积极地对每个合法用户 p*ss实现这一目标?

标签: javascript php browser tabs


【解决方案1】:

<script>
$(document).ready(function()
{
    $("a").attr("target", "");
    if(typeof(Storage)              !== "undefined") 
    {
        sessionStorage.pagecount    =   1;
        var randomVal               =   Math.floor((Math.random() * 10000000) + 1); 
        window.name                 =   randomVal;
        var url                     =   "url to update the value in db(say random_value)";
        $.post(url, function (data, url)
        {
        });
    } 
    else 
    {
        var url                     =   "url to remove random_value";           
        $.post(url, function (data, url)
        {
            sessionStorage.removeItem('pagecount');
            sessionStorage.clear();
            window.location         =   'logout.php';
        });
    }    
});
</script>

【讨论】:

    【解决方案2】:

    登录后添加以下脚本(比如dashboard.php)

    <script>
    $(document).ready(function()
    {
        $("a").attr("target", "");
        if(typeof(Storage)              !== "undefined") 
        {
            sessionStorage.pagecount    =   1;
            var randomVal               =   Math.floor((Math.random() * 10000000) + 1); 
            window.name                 =   randomVal;
            var url                     =   "url to update the value in db(say random_value)";
            $.post(url, function (data, url)
            {
            });
        } 
        else 
        {
            var url                     =   "url to remove random_value";           
            $.post(url, function (data, url)
            {
                sessionStorage.removeItem('pagecount');
                sessionStorage.clear();
                window.location         =   'logout.php';
            });
        }    
    });
    </script>
    

    在我其余页面的页眉中添加了以下脚本 - 'random_value' 来自该用户的数据库

    <script>
    $(document).ready(function()
    {       
        $("a").attr("target", "_self");
    
        if(typeof(Storage)                      !== "undefined") 
        {
            if (sessionStorage.pagecount) 
            {
                if('<?=$random_value?>'         ==  window.name)
                {
                    sessionStorage.pagecount    =   Number(sessionStorage.pagecount) + 1;
                }
                else
                {
                    var url                     =   "url to remove random_value";           
                    $.post(url, function (data, url)
                    {
                        sessionStorage.removeItem('pagecount');
                        sessionStorage.clear();
                        window.location         =   'logout.php';
                    });
    
                }               
            } 
            else 
            {           
                var url                         =   "url to remove random_value";           
                $.post(url, function (data, url)
                {
                    sessionStorage.removeItem('pagecount');
                    sessionStorage.clear();
                    window.location             =   'logout.php';
                });
            }
        } 
        else 
        {   
            var url                             =   "url to remove random_value";                   
            $.post(url, function (data, url)
            {
                sessionStorage.removeItem('pagecount');
                sessionStorage.clear();
                window.location                 =   'logout.php';
            });
        }   
    });
    </script>
    

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      相关资源
      最近更新 更多