我需要在Gmail中实现验证码功能。 如果用户第一次请求,则不会显示验证码图像。 但是,如果用户请求第二次登录,(用户第一次输入了错误的密码)需要显示验证码。如何检查请求是否来自同一客户端浏览器?
请让我知道如何检查请求是否来自同一用户,以便我可以在我的spring类中实现一些业务逻辑。
我需要在Gmail中实现验证码功能。 如果用户第一次请求,则不会显示验证码图像。 但是,如果用户请求第二次登录,(用户第一次输入了错误的密码)需要显示验证码。如何检查请求是否来自同一客户端浏览器?
请让我知道如何检查请求是否来自同一用户,以便我可以在我的spring类中实现一些业务逻辑。
你为什么要将登录尝试绑定到具体用户?如果我是一个男性因子,我想猜测密码,我会使用可以使用代理的bruteforcer。
每次我有新的IP,所以你的验证码不适合我。
在我看来,更好的解决方案是存储不正确的登录尝试计数器。每次有人输入特定登录名的错误密码时,都会增加此登录名的计数器值。如果密码正确,则将此值设置为0.如果计数器值大于0,则会显示您的验证码。
令人惊叹的答案Maksim。非常感谢..你已经将我的问题变成了一个非常简单的解决方案。 – atulsri 2013-04-22 11:18:23
如果我的答案有帮助,可以将其标记为最佳。 – 2013-04-22 13:06:06
在服务器端(servlet的)创建此会议
session.setAttribute("count",i); //you can use getAttribute() method to check the count.
连接柜台HTTP会话中命中HttpSession
HttpSession session = request.getHttpSession();
,并保持计数。您可能需要将会话存储在服务器端,而在分布式ENV中,您应该跨服务器同步HTTP会话。您也可以将该信息存储到客户端Cookie中。
有一对夫妇的方式做到这一点:
最后两个项目符号假设您想对错误的密码进行验证,而不是对不同的请求/页面重新加载。
以上每种方法都有其优缺点。您需要根据您的需要选择一种或多种组合或多种组合。
检查您是否可以使用会话ID。 – 2013-04-22 10:28:00