跪求 session保存验证码的问题

BlackSky_Sun 2008-10-25 04:14:01
我有个image.jsp ,里面随即产生的验证码,保存到session (validate)中。
然后我有个login.jsp页面
String ss=(String)session.getAttirbute("validate");

<input type="text" name="ch">
<image src="image.jsp">显示image产生的随机数.

然后我验证他在登陆时候 输入的验证码是否正确用 js函数
function validate(a){
if($('ch').value!=a)
{
alert('验证码错误');
return false;
}
}
当用户点确认时提交
<input type="submit" value="确认" onClick="return validate('<%=ss%>')">
现在我遇到的问题是,
因为 那随机数 是保存在session中的,
比如用户第一次到login.jspy页面时产生的随机数是 1423
然后我刷新login.jsp页面,页面上显示的是 2235,但是session中的值还是没有改变(1423),
然后用javaScript判断的时候肯定不成立, 我知道是session的问题,但是没什么解决方案,
各位帮忙了....

...全文
855 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
jy00884666 2009-09-10
  • 打赏
  • 举报
回复
感谢2楼的,我和楼主有同样的问题,今天终于解决了
yuqianskys 2008-11-27
  • 打赏
  • 举报
回复
第一次加载 login.jsp中的时候 用 <%String s=(String)session.getAttribute("random")%> 读出来的却是null,然后我又刷新login.jsp 这个时侯 s 就是第一次的验证码,它总是保存上一次的验证码,无论刷新多少次它总是保存你上一次显示在login.jsp中的验证码,第一次是空.

我也碰到这样的问题,真希望高人能帮我解决
yuqianskys 2008-11-27
  • 打赏
  • 举报
回复
附加码在页面出现第一次为空的情况解决了!
BlackSky_Sun 2008-10-27
  • 打赏
  • 举报
回复


仔细看了各位的建议,还是有点疑问, 首先我登陆login.jsp中。 页面加载的时候, <image src="image.jsp"> 调用image.jsp,然后把随机码 保存在 session中,
session.setAttribute("aa",aa); 比如现在的验证码是 1222
然后 当用户 觉得找个页面上的随机码 看不清楚,刷新login.jsp页面,(这个时候我多没提交..)
我想此时 login.jsp中的<image src="image.jsp"> 再次调用了,就是说重新生成了验证码,请注意这个时侯 login.jsp中的页面上,显示的是一个新的 验证码了,比如 3434
比如说刷新login.jsp这个页面N 次,页面上显示的是不同的验证码
但是最让我头疼的是,那个 aa 保存的 还是第一次 login.jsp加载的时候 产生的随机数 1222......
也不知道我这么说各位能否明白....
leiru 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 java2000_net 的回复:]
客户端是不要做任何验证的。否则就有漏洞了。因为验证码只能使用一次。
1 你用图片生成验证码,保存在session中
2 用户输入验证码
3 服务器端进行比对
4 无论正确与否,都销毁session里面的验证码!


OVER,这个才是标准流程
[/Quote]

学习了。。
BlackSky_Sun 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 java2000_net 的回复:]
也许你的浏览器缓存了。呵呵呵!
[/Quote]

校验 验证码的问题我已经解决了,在服务器做的验证,
说下我的解决方案,当他提交的时候我在 action 得到image.jsp中的session,然后在得到login.jsp中文本框的值,进行判断,不相等就 String s="输入的验证码不正确";
session.setAttribute("aa",s) reutrn mapping.findForward() 到login.jsp
String a =(String)session.getAttribute("a");
session.removeAttribute("a");
然后用个js函数 ,在body 加载的时候就调用 <body onload="onloadings(<%=a%>)">
function onlodings(a){
if(a==null||a==""){
}else{
alert(a);
}
}
上面解决了我的问题.....
但是我在做这个校验中还是有点疑惑
1 : 假设第一次加载 login.jsp中的时候 <image src="image.jsp">显示的是 1235,我在image.jsp中输出随机生成的验证码 也是 1235,保存的在session中,但是在login.jsp中用<%String s=(String)session.getAttribute("aa")%> 读出来的却是null,然后我又刷新login.jsp 这个时侯 s 就是1235,它总是保存上一次的验证码,无论刷新多少次它总是保存你上一次显示在login.jsp中的验证码,第一次是空.
zhmy0129 2008-10-27
  • 打赏
  • 举报
回复
9楼说的很好
mytimes_walker 2008-10-27
  • 打赏
  • 举报
回复
就要二楼的了!!!
yy2004005 2008-10-27
  • 打赏
  • 举报
回复
2楼正解~对这个问题我也不太会,关注ing~
sam_fisher 2008-10-27
  • 打赏
  • 举报
回复
对 消除缓存……重点在这
老紫竹 2008-10-27
  • 打赏
  • 举报
回复
也许你的浏览器缓存了。呵呵呵!
madshime 2008-10-26
  • 打赏
  • 举报
回复
9楼正解
javagxc 2008-10-26
  • 打赏
  • 举报
回复
2楼说的好,顶
shuizimuzhongling 2008-10-26
  • 打赏
  • 举报
回复
学习了,谢谢各位高人
ZHANGBINFLY 2008-10-26
  • 打赏
  • 举报
回复
up
chinajnt 2008-10-26
  • 打赏
  • 举报
回复
顶。。。。。。。。。
tarena_zhangjh 2008-10-26
  • 打赏
  • 举报
回复
引用 9 楼 java2000_net 的回复:
客户端是不要做任何验证的。否则就有漏洞了。因为验证码只能使用一次。
1 你用图片生成验证码,保存在session中
2 用户输入验证码
3 服务器端进行比对
4 无论正确与否,都销毁session里面的验证码!


销毁session 调用session.invalidate()
andycpp 2008-10-26
  • 打赏
  • 举报
回复
学到了
fantasylei 2008-10-26
  • 打赏
  • 举报
回复
学习了!哈哈!谢谢各位达人了
zjc_love 2008-10-26
  • 打赏
  • 举报
回复
2楼正解
加载更多回复(14)

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧