Java:确保web应用程序仅在一个浏览器选项卡中打开
确保特定页面(假设一个单页Web应用程序)仅在一个浏览器选项卡中打开的最佳方法是什么 假设Java Web应用程序具有身份验证,即用户必须登录(因此我们可以通过Java会话API确定哪个用户正在查看哪个页面) 这样做的目的是,如果为同一URL打开了另一个选项卡,用户将被重定向到一个静态页面,该页面告诉用户他在其他地方打开了应用程序(另一个选项卡)Java:确保web应用程序仅在一个浏览器选项卡中打开,java,session,servlets,servlet-filters,Java,Session,Servlets,Servlet Filters,确保特定页面(假设一个单页Web应用程序)仅在一个浏览器选项卡中打开的最佳方法是什么 假设Java Web应用程序具有身份验证,即用户必须登录(因此我们可以通过Java会话API确定哪个用户正在查看哪个页面) 这样做的目的是,如果为同一URL打开了另一个选项卡,用户将被重定向到一个静态页面,该页面告诉用户他在其他地方打开了应用程序(另一个选项卡) 我当前的方法无法用于同一浏览器中的选项卡,因为JSESSIONID存储在cookie中,可用于所有浏览器的选项卡。您可以创建对后端的异步调用(关键字:
我当前的方法无法用于同一浏览器中的选项卡,因为
JSESSIONID
存储在cookie中,可用于所有浏览器的选项卡。您可以创建对后端的异步调用(关键字:长时间轮询),并通过它发送单个字节以保持其活动状态。只要该选项卡处于活动状态,它就处于打开状态。如果有第二个调用,您可以对此进行测试。我假设您当前的用例是:
因此,答案很可能是,您希望在服务器上的会话中存储一个随机字符串,在登录时将其提供给用户,并检查每个请求是否都包含该字符串,否则会将它们反弹到注销页面。在web客户端的javascript中,存储该令牌,并将其与每个请求一起发送到服务器。我有一个单页应用程序,“富客户端”。我需要将其限制为仅在一个选项卡中打开,因为在不同的选项卡中打开会导致更复杂。让我猜猜,当两个浏览器打开你的应用程序时,你共享了导致问题的会话?@ChinBoon这是看待此问题的另一种方式。解决此问题的另一种方式是使用PhaseListener并记录当前页面,然后如果用户在另一个页面上,则将其发送到该页面。这样一来,每个标签页都会被强制放在同一个页面上,同时也会禁用浏览器导航(这正是我使用它的主要目的)。@Stefan:你是如何得出OP使用JSF的结论的?在整个问题中没有任何迹象表明OP正在使用JSF,更不用说OP的后期历史了。为什么要投反对票?这可能不是一个“好”的解决方案,但它解决了问题。我没有否决你的解决方案,其他人否决了,并且应该证明为什么。因为,正如你所说,这不是一个优雅的方法(它可能会引起其他问题),我将尝试它只是作为最后的手段。现在我还在寻找。