现在做的这个网站用到了动态生成验证码的功能。并且点击动态生成的验证码图片要重新生成新的验证码。
我的生成验证码的servlet是imms/securityNum.genpic则在需要验证码的页面可以这么调用
我这里的ReloadCode函数是重新生成验证码的javascript函数,其内容如下(我使用了jquery):
驗證碼: <input class="input_login" name="___securityNumCookie_"
type="text" size=11 maxlength="4" />
<img src="/imms/securityNum.genpic" width="52" height="20" name="numImg"></img>
测试的时候发现,在ie6下点击验证码图片可以生成新的验证码,但是在ie7,firefox下点击图片的时候都没有反应。
上网查了下资料,发现别人也碰到过类似的问题,初步猜测是ie7,firefox的缓存机制和ie6不同。由于js指定的src与原来图片的src相同,因此ie7,firefox不刷新验证码。解决的方法是为imms/securityNum.genpic页面传递一个参数就可以了。代码如下:
Today = new Date();
var NowHour = Today.getHours();
var NowMinute = Today.getMinutes();
var NowSecond = Today.getSeconds();
var mysec = (NowHour*3600)+(NowMinute*60)+NowSecond; //弄個時間做參數傳過去。
alert("驗證碼不正確,請重新輸入!");
document.login.mypretime.value=0;
alert(mysec);
document.getElementById("numImg").src="/imms/securityNum.genpic?temptime="+mysec;
由于传递了不同的参数,浏览器认为img的src发生了改变,因此重新生成了新的验证码。
(修改)
在用jfreechart生成圖片時也是用<img src="xxx.xxxx"/>,也導致IE7緩存不會重新請求生成新的圖片。
本來一開始就以為是IE的問題,可是沒想到台灣的IE6也會出現這樣的問題,和IE7一樣。
後來還是這個問題。
其實加個Math.random()就搞定了。
document.getElementById("numImg").src="/imms/securityNum.genpic?temptime="+Math.random();
搞定了。