jquery ajax问题

仙剑 2012-06-20 02:21:14
今天做个Asp.net mvc登录页面,遇到一个奇怪的问题,请大牛们帮忙分析一下
我的代码如下:

View页面(Login.aspx):

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Login</title>
<script language="javascript" type="text/javascript" src="<%= ResolveUrl("~/Scripts/jquery-1.4.1.js") %>"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function() {
$("#btn_login").click(function() {
if (txt_userid.value == '') {
alert("User id empty");
return;
}
if (txt_password == '') {
alert("Password empty.");
return;
}
$.ajax({ url: "../Home/DoLogin",
data: {
userid: txt_userid.value,
password: txt_password.value,
singlelogin: sl_singlelogin.options[sl_singlelogin.selectedIndex].value
},
dataType: "json",
complete: function(xhr, result) {
if (result == "success") {
var obj = $.parseJSON(xhr.responseText);
if (obj.result) {
txt_userid.value = "";
txt_password.value = "";
alert("Login ok.");
} else {
alert("Fail." + obj.error);
}
} else {
alert("Fail.\r\nxhr statu:" + xhr.statusText + "\r\nresult:" + result);
}
}
});
});
});

</script>

</head>
<body>
<div>
<table style="width: 100%;">
<tr>
<td>
User ID:
</td>
<td>
<input type="text" id="txt_userid" />
</td>
</tr>
<tr>
<td>
Password:
</td>
<td>
<input type="password" id="txt_password" />
</td>
</tr>
<tr>
<td>
Single Login
</td>
<td>
<select id="sl_singlelogin">
<option label="Yes" value="1" selected="selected"></option>
<option label="No" value="0"></option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<input id="btn_login" type="button" value="Login" />
</td>
</tr>
</table>
</div>
</body>
</html>


Controller(HomeController.cs):


public JsonResult DoLogin()
{
try
{
string userid = Request["userid"].ToString();
string password = Request["password"].ToString();
int singlelogin = Convert.ToInt32(Request["singlelogin"]);
Session["UserID"] = userid;
Session["Password"] = password;
Session["SingleLogin"] = singlelogin;
MvcApplication.G_LogOperator.WriteOperationLog("Home->DoLogin", "Login info:UserID=" + userid + ",Password=" + password + ",SingleLogin=" + singlelogin.ToString());
return Json(new { result = true }, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(new { result = false, error = ex.ToString() }, JsonRequestBehavior.AllowGet);
}
}


我运行这个页面,输入用户Id和密码,点提交,提示“Login OK”,对应也会有一条日志记录,
再次输入用户Id和密码(和上次相同),点提交,提示“Login OK”,可是没有日志记录,也就是说DoLogin过程根本没有执行,
可是我输入其他用户Id和密码,点提交,又有了日志记录。

我就奇怪了,为啥我输入两个用户Id密码,程序执行会不一样呢,只要是以前输过的用户名密码下次输入提交就不执行DoLogin过程,不知为啥,特别郁闷...
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
仙剑 2012-06-20
  • 打赏
  • 举报
回复
我也觉得好像是缓存了,可是不知怎么改,

按照 yibey 所说的 使用Post方式,果然可以了

非常感谢||||

结贴给分了,呵呵
yibey 2012-06-20
  • 打赏
  • 举报
回复
让我来告诉你吧。。。

IE浏览器中会对 jquery ajax的 get请求缓存,也就是说。当你设置一样的用户名和密码后都参数字符串没有变化,所以浏览器自动默认请求缓存里的数据,不进行后台处理。。
所以这个时候即使你的密码是看不到的,但是我只要打开浏览器监控比如firebug就又可以看见你的密码是多少了,安全性低。

所以这里解决方案推荐使用post方法请求数据(安全,因为你这里是有密码的)。
还有个方案你非要用get的话,在参数里加一个 new date()这样你的本地请求时间没有一次会一样了就保证你请求的参数不一样了,那浏览器就会吧请求发到后台去了
liudehuas5 2012-06-20
  • 打赏
  • 举报
回复
有没有可能是缓存了呢?

52,797

社区成员

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

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