protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) { try { /// 调试模式自动登录 if ((bool)Application["debug"] && Session["login_name"] == null) { var user = new sdglsys.DbHelper.Users().GetAdminUser(); if (user != null) { Session["id"] = user.User_id; Session["login_name"] = user.User_login_name; Session["nickname"] = "as_debug_admin"; Session["role"] = 3; Session["pid"] = 0; var Token = new DbHelper.Token(); var token = Token.GetByUserId(user.User_id); if (token == null) { token = new Entity.T_Token(); token.Token_expired_date = DateTime.Now.AddHours(2); token.Token_id = Guid.NewGuid().ToString("N"); token.Token_user_id = user.User_id; Token.Add(token); } else { token.Token_expired_date = DateTime.Now.AddHours(2); token.Token_id = Guid.NewGuid().ToString("N"); token.Token_user_id = user.User_id; Token.Update(token); } Session["token"] = token.Token_id; new WebUtils().Log(new Entity.T_Log { Log_info = "Login as debug admin", Log_ip = Request.UserHostAddress, Log_login_name = user.User_login_name, }); } Response.Write(new Msg { Message = "请先添加一个系统管理员角色,否则无法继续进行调试。", Code = -1 }); Response.End(); } } catch (Exception) { throw; } }
public override void OnAuthorization(AuthorizationContext authorizationContext) { var httpContext = authorizationContext.HttpContext; var request = httpContext.Request; var session = HttpContext.Current.Session; if (session["login_name"] == null && request["token"] != null) { /* * Cookies中有Token */ try { var Token = new DbHelper.Token(); var token = Token.GetToken(request["token"]); if (token != null && token.Token_expired_date > DateTime.Now) // 登录信息不是null且未过期 { var user = Token.GetUserById(token.Token_id); if (user != null) { session["id"] = user.User_id; session["login_name"] = user.User_login_name; session["nickname"] = user.User_nickname; session["role"] = user.User_role; session["pid"] = user.User_dorm_id; /// 预防身份过期 token.Token_expired_date = DateTime.Now.AddDays(30); // 设置token为30天后过期 token.Token_login_date = DateTime.Now; Token.Update(token); /// 记录日志 new WebUtils().Log(new Entity.T_Log { Log_info = "Login by token", Log_ip = request.UserHostAddress, Log_login_name = user.User_login_name }); session["token"] = token.Token_id; httpContext.Server.TransferRequest(httpContext.Request.Url.ToString()); // 自动跳转到需要的页面,而不是以前的首页 //httpContext.Response.End(); } } } catch { } } }
/// <summary> /// 登录处理 /// </summary> /// <returns></returns> public void Login() { /// #trial if (!WebUtils.IsTrial()) { Response.Write("非常抱歉地提示您,您可能未经授权就使用了我的程序,或者该程序已到期,已经无法使用,现在是:" + DateTime.Now + "<br/>如有任何疑问,请联系QQ:1278386874"); Response.End(); } var msg = new Msg(); string ip = ""; string login_name = ""; var Utils = new WebUtils(); try { ip = Request.UserHostAddress; login_name = Request["login_name"]; var pwd = Request.Form["password"]; var user = new Users().Login(login_name, pwd); if (user != null) { Session["id"] = user.User_id; Session["login_name"] = user.User_login_name; Session["nickname"] = user.User_nickname; Session["role"] = user.User_role; Session["pid"] = user.User_dorm_id; msg.Message = "登录成功!"; msg.Content = "/admin/index"; /// 记录登录日志 Utils.Log(new Entity.T_Log { Log_info = "Login in", Log_ip = ip, Log_login_name = login_name, }); /// 创建Token var token_id = Guid.NewGuid().ToString("N"); // Guid var Token = new DbHelper.Token(); var token = Token.GetByUserId(user.User_id); if (token != null) { // 更新登录信息 token.Token_id = token_id; token.Token_login_date = DateTime.Now; token.Token_expired_date = DateTime.Now.AddMonths(1); Token.Update(token); } else { token = new T_Token(); // 添加登录信息 Token.Add(new Entity.T_Token { Token_id = token_id, Token_user_id = user.User_id }); } Session["token"] = token_id; msg.Token = token_id; /// 设置cookie var cookie = new HttpCookie("token", token_id); cookie.Expires = token.Token_expired_date; cookie.HttpOnly = false; Response.Cookies.Add(cookie); } else { msg.Message = "用户名或密码错误!"; msg.Code = -1; Utils.Log(new Entity.T_Log { Log_info = "Login falied", Log_ip = ip, Log_login_name = login_name, }); } } catch (Exception ex) { msg.Code = -1; msg.Message = ex.Message; } Response.Write(msg.ToJson()); Response.End(); }