加载页面的时候,会先获得当下产生的一个rand:
<%String rand =(String)session.getAttribute("rand"); %>
,这个值由服务端传给了photovalue="<%=rand %>" 这个文本框;但是,页面在客户端加载后,便再次去读取src="<%=request.getContextPath() %>/admin/PhotoVerify.jsp"的PhotoVerify.jsp页面,此时,PhotoVerify.jsp会重新产生一个rand,这个 rand 和之前传给客户端的不是同一个rand了,所以,验证码会报错。也就是获取页面时PhotoVerify.jsp产生了一个rand并传给了客户端,但页面加载完后加载图片时,图片src加载PhotoVerify.jsp又产生了一次rand,两次产生的rand,自然不一致了。可以通过AJAX的方式获得PhotoVerify.jsp最后产生的rand。一般来说,在客户端验证验证码,相当于没有设置验证码,不建议这么做,因为验证码就是为了防止穷举、暴力破解、程序自动注册等非法行为,而你把验证码直接放在了客户端,你这个验证码形同虚设。