用户登录:
[HttpPost]
[CustomAllowAnonymous]//允许匿名登录(这个是自定义的)
public ActionResult Login(string name, string password, string verify)
{
string formName = base.HttpContext.Request.Form["Name"];
var result = base.HttpContext.Login(name, password, verify);
if (result == UserManager.LoginResult.Success)
{
if (base.HttpContext.Session["CurrentUrl"] != null)
{
string url = base.HttpContext.Session["CurrentUrl"].ToString();
base.HttpContext.Session.Remove("CurrentUrl");
return base.Redirect(url);
}
else
return base.Redirect("/Home/Index");
}
else
{
ModelState.AddModelError("failed", result.GetRemark());
return View();
}
}
登录验证代码
public static class UserManager
{
private static Logger logger = new Logger(typeof(UserManager));
/// <summary>
/// 用户登录验证
/// </summary>
/// <param name="name"></param>
/// <param name="password"></param>
/// <param name="verifyCode"></param>
/// <returns></returns>
public static LoginResult Login(this HttpContextBase context, string name, string password, string verifyCode)
{
if (context.Session["CheckCode"] != null
&& !string.IsNullOrWhiteSpace(context.Session["CheckCode"].ToString())
&& context.Session["CheckCode"].ToString().Equals(verifyCode, StringComparison.CurrentCultureIgnoreCase))
{
using (IUserCompanyService servcie = DIFactory.GetContainer().Resolve<IUserCompanyService>())//查找数据库
{
User user = servcie.Set<User>().FirstOrDefault(u => u.Name.Equals(name) || u.Account.Equals(name) || u.Mobile.Equals(name) || u.Email.Equals(name));//账号查找
if (user == null)
{
return LoginResult.NoUser;
}
else if (!user.Password.Equals(MD5Encrypt.Encrypt(password)))
{
return LoginResult.WrongPwd;
}
else if (user.State == 1)
{
return LoginResult.Frozen;
}
else
{
//登录成功 写cookie session
CurrentUser currentUser = new CurrentUser()
{
Id = user.Id,
Name = user.Name,
Account = user.Account,
Email = user.Email,
Password = user.Password,
LoginTime = DateTime.Now
};
#region Cookie
//context.Request.Cookies
//HttpCookie cookie = context.Request.Cookies.Get("CurrentUser");
//if (cookie == null)
//{
HttpCookie myCookie = new HttpCookie("CurrentUser");
myCookie.Value = JsonHelper.ObjectToString<CurrentUser>(currentUser);
myCookie.Expires = DateTime.Now.AddMinutes(5);
//5分钟后 硬盘cookie
//不设置就是内存cookie--关闭浏览器就丢失
//改成过期 -1 过期
//修改cookie:不能修改,只能起个同名的cookie
//myCookie.Domain//设置cookie共享域名
//myCookie.Path//指定路径能享有cookie
context.Response.Cookies.Add(myCookie);//一定要输出
//}
//前端只能获取name-value
#endregion Cookie
#region Session
//context.Session.RemoveAll();
var sessionUser = context.Session["CurrentUser"];
context.Session["CurrentUser"] = currentUser;
context.Session.Timeout = 3;//minute session过期等于Abandon
#endregion Session
logger.Debug(string.Format("用户id={0} Name={1}登录系统", currentUser.Id, currentUser.Name));
return LoginResult.Success;
}
}
//服务端是只靠session--安全
//cookie一直做登陆
//cookie+session:验证用session,没有session就看cookie(cookie写个时间)
}
else
{
return LoginResult.WrongVerify;//这是一个枚举,想返回什么,自定义去吧
}
}
}
用户退出:
public ActionResult Logout()
{
this.HttpContext.UserLogout();
return RedirectToAction("Index", "Home"); ;
}
public static void UserLogout(this HttpContextBase context)
{
#region Cookie
HttpCookie myCookie = context.Request.Cookies["CurrentUser"];
if (myCookie != null)
{
myCookie.Expires = DateTime.Now.AddMinutes(-1);//设置过过期
context.Response.Cookies.Add(myCookie);
}
#endregion Cookie
#region Session
var sessionUser = context.Session["CurrentUser"];
if (sessionUser != null && sessionUser is CurrentUser)
{
CurrentUser currentUser = (CurrentUser)context.Session["CurrentUser"];
logger.Debug(string.Format("用户id={0} Name={1}退出系统", currentUser.Id, currentUser.Name));
}
context.Session["CurrentUser"] = null;//表示将制定的键的值清空,并释放掉,
context.Session.Remove("CurrentUser");
context.Session.Clear();//表示将会话中所有的session的键值都清空,但是session还是依然存在,
context.Session.RemoveAll();//
context.Session.Abandon();//就是把当前Session对象删除了,下一次就是新的Session了
#endregion Session
}