4

项目背景

客户要求网站的用户(当登录并能够查看他们的个人信息时)如果他们尝试使用浏览器的导航按钮进行导航,则必须强制退出。

我的研究

在 SO 上搜索似乎表明人们遇到的大多数问题是“阻止”人们在注销时点击浏览器的后退按钮,例如thisthis。不同之处在于我需要“阻止”用户在历史中向后导航(甚至向前导航,尽管我不知道如果用户一开始就无法返回,他们如何在历史中前进)即使他们已登录,也必须强制他们使用提供的导航。

我想到的解决方案

我正在考虑在用户点击后退按钮并将其注销时捕获浏览器的事件。但是,正如这里所讨论的,您似乎只能使用 Javascript 而不能使用服务器端代码来“做”。我对这种方法的疑虑是,用户只需在浏览器上禁用 Javascript 即可绕过它。

我的问题

所以我的问题是 - 有没有办法可以在服务器端捕获浏览器事件并将它们记录下来?如果没有,实现我的目标的替代方法是什么?

4

7 回答 7

7

我会说您最好的选择是跟踪会话。

您让客户端向您发送服务器处理请求时的时间戳,或者更简单:依赖于用户的计数器(您每次发送给客户端),服务器端跟踪发送的最后时间戳/计数器.

如果用户单击后退按钮,他将向您发送一个旧的时间戳/计数器,而不是最后一个当前的,然后您可以将他从服务器端注销。

这应该可以解决问题。

为了确保技巧完成并使其独立于javascript,我会说您可以将此值放在隐藏参数中,或者作为隐藏字段表单,因此用户看不到它,但它总是被发送到你的服务器。

我希望这有帮助!

于 2013-01-28T11:33:40.610 回答
1

我所做的是创建一个页面,1 个 html 文档,然后使用 AJAX 浏览整个站点。当用户点击后退按钮时,它会将您带到索引页面,即登录页面。要登录,我使用 AJAX,我只在服务器端进行重定向。唯一的问题是当用户点击前进按钮时,好在没有 JS 没有导航。

于 2013-01-30T08:54:35.647 回答
1

如果要求捕获浏览器导航按钮并将它们注销 - 更简单的选择是从不首先显示这些导航按钮。如果用户不能使用或单击后退和前进有什么用。

从您的 webapp打开一个没有工具栏、菜单栏的新浏览器。当用户关闭窗口时,捕获事件并注销会话。这样 - 解决方案将保持简单。

我的2c

于 2013-01-30T11:48:19.837 回答
0

依赖 javascript 不是一个好习惯,因为它在客户端,并且客户端总是可以绕过在客户端运行的内容。

您应该改用会话超时。

于 2013-01-25T14:46:30.980 回答
0

抱歉,无法自行获取按钮。

由于这是一个安全问题,因此解决方案(没有 javascript)将是:

  • 使用在导航出或进入未编码页面时发出警告的编码页面。即使是相互身份验证也可能满足您的需求。

验证

离开

于 2013-01-25T15:49:18.257 回答
0

如果我正确理解您的问题:

您无法避免用户向您的服务器发送请求,除非您想为 Intranet 工作人员(来自开源浏览器项目)提供自定义更改版本,否则用户可以完全控制他/她的浏览器。

如果没有 javascript,您唯一能做的就是在单击所需的导航按钮时通过 GET 发送特定参数。如果该参数存在,则您允许查看下一页/上一页,否则用户将被注销。

显然,用户可以通过使用浏览器开发工具绕过它。但是您无法在此级别完全控制用户 UI 行为。

于 2013-01-28T23:50:05.227 回答
0

如果我是对的,那么您说的是浏览器中的 NO-Cache。您可以设置所有这些,如下所示:

    response.setHeader("pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Cache-Control", "no-store");
    response.addDateHeader("Expires", -1);
    response.setDateHeader("max-age", 0);
    response.setIntHeader ("Expires", -1);
    prevents caching at the proxy server
    response.addHeader("cache-Control", "private");

然后您可以定义一个过滤器来检查每个页面上的会话。当用户登录时,在会话中设置一个属性,并在注销时将其删除。

于 2013-01-30T10:50:00.697 回答