最近项目开发过程中遇到一个问题,需求是记录各个权限用户最后登录时间,之前没有细想只是一股脑的把当前时间,以及各种身份验证信息塞进方法验证,然后把该方法放在登录按钮旁边,结果测试发现,实际出现情况是,后台插入数据库操作还没走完,页面已经跳转,然后打开系统管理页面查看记录情况,果然没有保存成功。后来各种试验发现弹出登录页面后必须等上七八秒再点登录才能记录成功,但这明显不符合实际需求。再然后,想着退而求其次,把该方法放在首页里面,即登录成功后跳转的页面,果然,记录成功,每次登录,时间成功记录。就在沾沾自喜以为已经解决的时候,测试反馈说仔细看了下系统管理页面,时间是记录成功了,但是记录次数出错,就是说由于该方法位于
$(function),因此每次刷新页面,都会记录一次时间,搞成了半吊子,于是继续埋头搞,脑子一度陷入混乱的情况下灵感一现,发现缺少了一个动态标志来确保方法只执行一次,但是数据库表已成型,不能更改,而且考虑从后台再返回标志可能还会延时,于是才想起来cookie这个常年不用的东西。
查看官方给出的示例代码,写出符合自己需求的方法,分别是设置,获取,清除,点击登录时候将标志放入cookie,首页加入获取\清除的cookie方法但是测试发现,断点处的清除的方法确实走了但是并没有改变变量值,最后直接把在调用方法里set,测试完美解决.
$(function),因此每次刷新页面,都会记录一次时间,搞成了半吊子,于是继续埋头搞,脑子一度陷入混乱的情况下灵感一现,发现缺少了一个动态标志来确保方法只执行一次,但是数据库表已成型,不能更改,而且考虑从后台再返回标志可能还会延时,于是才想起来cookie这个常年不用的东西。
//设置cookie
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
//获取cookie
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
}
return "";
}
//清除cookie
/* function clearCookie(name) {
setCookie(name,"false", -1);
} */
function checkCookie() {
var user = getCookie("isFirst");
if (user == "true") {
//clearCookie("isFirst");
setCookie("isFirst","false",1);
var us = getCookie("isFirst");
userinfoService.insertUserLog("登录");
}
}
查看官方给出的示例代码,写出符合自己需求的方法,分别是设置,获取,清除,点击登录时候将标志放入cookie,首页加入获取\清除的cookie方法但是测试发现,断点处的清除的方法确实走了但是并没有改变变量值,最后直接把在调用方法里set,测试完美解决.