注意:方法仍旧不可跨域,请确认客户端和服务端在同一域名下(以IP+端口号的形式的地址只要端口号不同也视为跨域)
前端
1.页面引用jquery库
<script type="text/javascript" src="script/jquery-1.10.2.min.js" ></script>
2.调用方法模拟模拟用户登陆
function checkuser() {
var p = {};
p.userid = $("#UID").val();
p.password = $("#Password").val();
var ps = JSON.stringify(p);
$.ajax({
type: "POST",
async: "false",
contentType: "application/json;charset=utf-8",
url: "http://192.168.44.1/AccountLock/CommonService.asmx/User_Login",
data: ps,
dataType: 'json',
beforeSend: function(x) {
x.setRequestHeader("Content-Type", "application/json; charset=utf-8");
},
error: function(x, e) {
alert("网络忙,请稍后再试");
},
success: function(result) {
var json = eval('(' + result.d + ')');
if (json.OperateResult == "success" && json.ResultList.length > 0) {
var enablelogin = json.ResultList[0].IsEnable;
if (enablelogin == "false") {
alert(json.ResultList[0].Info);
return false;
} else {
$("#Button1").click();
}
} else {
alert(json.StackTrace);
}
}
});
}
后端
webservice的config文件添加如下配置
<system.web>
<compilation/>
<webServices>
<protocols>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="HttpSoap"/>
<add name="Documentation"/>
</protocols>
</webServices>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpHandlers>
</system.web>
注意:httpHandlers中的程序集版本要和项目Framework的版本匹配,我的项目是3.5
代码中:首先确保下行注释已经去掉
[System.Web.Script.Services.ScriptService]
方法追加[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
定义的两个参数名称要与ajax中post的两个属性完全一致
#region 用户登陆验证
/// <summary>
/// 用户登陆验证
/// </summary>
/// <param name="userid">用户登录名</param>
/// <param name="password">用户密码</param>
/// <returns></returns>
[WebMethod(Description = "用户登陆验证")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string User_Login(string userid, string password)
{
//30分钟内密码输入错误三次,当日锁定该账号,转天解锁或者联系管理员解锁
try
{
DataTable sdt = new DataTable();
sdt.Columns.Add("Info", System.Type.GetType("System.String"));
sdt.Columns.Add("IsEnable", System.Type.GetType("System.String"));
DbHelperSQL.connectionString = masterCon;
string today = System.DateTime.Now.ToString("yyyy-MM-dd");
string tomorrow = System.DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
string info = "";
string IsEnable = "";
SqlParameter[] cmdParms = new SqlParameter[1];
cmdParms[0] = new SqlParameter("USER_UID", SqlDbType.VarChar);
cmdParms[0].Value = userid;
//1.先验证当前账号是否处于锁定状态
string sqllocked = "select userid from [BUA].[dbo].[OA_User_Locked] where userid=@USER_UID and SetTime = '" + today + "'";
DataTable lockdt = DbHelperSQL.Query(sqllocked, cmdParms).Tables[0];
if (lockdt.Rows.Count > 0)
{
//当日处于锁定
info = "当前账号处于锁定状态,请改日尝试登录或联系管理员(25250282)解决";
IsEnable = "false";
}
else
{
string sql = @"SELECT USER_PASSWD from [BUA].[dbo].[BUA_USER] where USER_UID=@USER_UID";
DataTable dt = DbHelperSQL.Query(sql, cmdParms).Tables[0];
if (dt.Rows.Count > 0)
{
//账号存在,验证密码是否正确
if (dt.Rows[0]["USER_PASSWD"].ToString() == password)
{
//密码正确,设置登陆表中当天所有的记录为无效,删除锁定表对应记录
sql = "delete from [BUA].[dbo].[OA_Log_Login] where userid='" + userid + "' and loginTime>='" + today + "' and loginTime<='" + tomorrow + "'";
DbHelperSQL.ExecuteSql(sql);
info = "";
IsEnable = "true";
}
else
{
//密码错误,插入错误记录
sql = "insert into [BUA].[dbo].[OA_Log_Login](userid,loginTime) values('" + userid + "','" + System.DateTime.Now + "')";
DbHelperSQL.ExecuteSql(sql);
sql = "select id from [BUA].[dbo].[OA_Log_Login] where userid=@USER_UID and loginTime>='" + today + "' and loginTime<='" + tomorrow + "'";
DataTable logindt = DbHelperSQL.Query(sql, cmdParms).Tables[0];
if (logindt.Rows.Count >= 3)
{
//连续输错三次密码,锁定该账号
sql = "insert into [BUA].[dbo].[OA_User_Locked](userid,SetTime) values('" + userid + "','" + today + "')";
DbHelperSQL.ExecuteSql(sql);
info = TimeSpan + "分钟内密码连续输入错误三次,根据规定,今日您的账号已被系统锁定,清改日登陆或联系管理员";
}
else
{
info = "密码错误,请核对后重新填写";
}
IsEnable = "false";
}
}
else
{
//账号不存在
info = "该账号不存在,请核对后重新填写";
IsEnable = "false";
}
}
DataRow dr = sdt.NewRow();
dr["Info"] = info;
dr["IsEnable"] = IsEnable;
sdt.Rows.Add(dr);
return GetSuccessData(sdt);
}
catch (Exception ex)
{
return GetFailData(ex.ToString());
}
}
#endregion