如何检查请求是否来自同一客户端浏览器?

时间:2013-04-22 10:27:16

标签: java

我需要像在Gmail中一样实现验证码功能。 如果用户第一次请求,则不会显示验证码图像。 但是,如果用户请求第二次登录,(用户第一次输入了错误的密码)需要显示验证码。

请让我知道如何检查请求是否来自同一个用户,以便我可以在我的春季课程中实现一些业务逻辑。

4 个答案:

答案 0 :(得分:1)

将计数器附加到HTTP会话。您可能需要在服务器端存储会话,并且在分布式ENV中,您应该跨服务器SYNC HTTP会话。您还可以将该信息存储到客户端cookie中。

答案 1 :(得分:1)

为什么要尝试将登录尝试绑定到具体用户?如果我是一个犯罪分子,我想猜密码,我会使用可以使用代理的强制执行器。

每次我都有新的IP,所以你的验证码对我不起作用。

在我看来,更好的解决方案是存储错误登录尝试的计数器。每当有人输入特定登录名的错误密码时,您都会增加此登录的计数器值。如果密码正确,则将此值设置为0.如果计数器值大于0,您将显示验证码。

答案 2 :(得分:0)

在服务器端(servlet)创建HttpSession

HttpSession session = request.getHttpSession();

并在此会话中保持点击次数

session.setAttribute("count",i);  //you can use getAttribute() method to check the count.

答案 3 :(得分:0)

有几种方法可以做到这一点:

  • 首次加载页面时,启动会话(或发送一个coookie)。对会话/ cookie使用计数。一旦你第二次找到cookie,你就可以吐出验证码。
  • 使用隐藏的表单字段。在第二个请求中添加一个特殊的名称/值对,并发送一个Captcha。
  • 使用AJAX!这将涉及使用XMLhttprequest提交您的表单,如果无效,您可以显示验证码!这可能会给你更多的控制权,但是会以重新工作为代价。

最后两个项目符号假设你想要在错误的密码上使用验证码而不是在不同的请求/页面重新加载。

上述每种方法都有其自身的优缺点。您需要根据需要选择一个或多个组合或多个组合。