说明:原理性的东西在后续的章节会涉及、此处讲述使用说明。
一、关于Cookie和Session此处简单介绍一下、作为初学者可以先了解以下两点
1.Cookie是存于客户端的(即用户电脑)、Session是存于服务端的。
2.Cookie数据所有的浏览器端共享、Session数据由服务器开辟内存保存、每一个浏览器都有一个唯一的SessionID
人手一份
二、首先需要介绍一下FormsAuthentication密封类。
1.用户登录成功后、需要保存用户信息到Cookie(本地)可以调用如下方法、下次调用就会判断是否有Cookie信息
如果Cookie信息没有过期可以直接跳过登录。
该类有一个方法SetAuthCookie(string userName, bool createPersistentCookie)
注意:该方法如果被调用多次、则保存最后一个设置的Cookie
public ActionResult AdminLogin(SysAdmin objAdmin)
{
string adminName = new BLL.SysAdminManager().AdminLogin(objAdmin);
if (adminName != null)
{
FormsAuthentication.SetAuthCookie(adminName, true);
TempData["adminName"] = adminName;
return RedirectToAction("GetAllStuList", "Student");
}
else
{
ViewBag.Info = "用户或密码错误";
}
return View("AdminLogin");
}
2.判断用户是否通过身份验证并且获取用户名称、没有通过验证、则转到登录页面
已经通过验证、则不需要登录
public ActionResult Index()
{
if (this.User.Identity.IsAuthenticated)
{
string adminName = this.User.Identity.Name; //获取写入的adminName
ViewBag.adminName = adminName
return View("StudentManage");
}
else
{
return RedirectToAction("Index","SysAdmin");
}
}
3.控制器或控制器方法如果添加了 [Authorize]特性、则通过路由访问之前需要验证是否已经通过身份验证、作用类似于第二点if判断体。
[Authorize]
public ActionResult Index()
{
string adminName = this.User.Identity.Name; //获取写入的adminName
ViewBag.adminName = adminName;
return View("StudentManage");
}
如果浏览器没有登录成功也、就是执行了 FormsAuthentication.SetAuthCookie(adminName, true)方法、那么url访问该路由就会失败。会出现一个如下界面
如果想要浏览器访问url失败后跳转到指定的页面、可以在Web.config的 <system.web>节点中添加如下标签
<authentication mode="Forms">
<forms loginUrl="~/SysAdmin/Index" timeout="2880" />
</authentication>
访问失败就会跳转到指定的页面