ASP.NET MVC 4 View ( Razor ) + Custom Forms Authentication + HTML Helper – Session 方法
web.conf |
<?xml version="1.0" encoding="utf-8"?> <configuration> … … <system.web> … … <authentication mode="Forms"> <forms loginUrl="~/Home/Login" timeout="2880" /> </authentication> … … </system.web> </configuration> |
\Views\web.conf |
<?xml version="1.0"?> <configuration> … … <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> <add namespace="CMS.Library" /> </namespaces> </pages> </system.web.webPages.razor> … … <configuration> |
\Shared\_Layout.cshtml |
… … <section id="login"> @if (string.IsNullOrEmpty(Session.GetUserInfo().Email)) { @Html.ActionLink("Login", "Login", "Home") } else { <text> Hello, @Session.GetUserInfo().Email! @Html.ActionLink("Logout", "Logout", "Home") </text> } </section> <nav> <ul id="menu"> <li>@Html.ActionLink("Home", "Index", "Home")</li> @if (string.IsNullOrEmpty(Session.GetUserInfo().Email)) { <li>@Html.ActionLink("Login", "Login", "Home")</li> } else { <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Contact", "Contact", "Home")</li> <li>@Html.ActionLink("Logout", "Logout", "Home")</li> } </ul> </nav> … … |
\Home\Login.cshtml |
<table> @using (@Html.BeginForm("Login", "Home")) { <tr> <td>Login :</td> <td>@Html.TextBox("Email")</td> </tr> <tr> <td>Password :</td> <td>@Html.Password("Password")</td> </tr> <tr> <td colspan="2"> <input type="submit" name="Submit" value="Submit" /> </td> </tr> } </table> |
\Library\SessionHelper.cs |
using System; using System.Web; using System.Web.SessionState; namespace CMS.Library { public static class SessionHelper { public static User GetUserInfo(this HttpSessionStateBase session) { return (session["LoginUser"] as User) ?? new User(); } public static void SetUserInfo(this HttpSessionStateBase session, User user) { session["LoginUser"] = user; } public static User GetUserInfo(this System.Web.SessionState.HttpSessionState session) { return (session["LoginUser"] as User) ?? new User(); } public static void SetUserInfo(this System.Web.SessionState.HttpSessionState session, User user) { session["LoginUser"] = user; } } } |
\Controller\HomeController.cs |
using System; using System.Linq; using System.Web.Security; using System.Web.Mvc; using CMS.Library; namespace CMS.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } [Authorize] public ActionResult About() { return View(); } [Authorize] public ActionResult Contact() { return View(); } public ActionResult Login() { return View(); } [AllowAnonymous] [HttpPost] public ActionResult Login(FormCollection collection) { String Login = collection["Email"].ToString(); String Passwd = collection["Password"].ToString(); CMSEntities entity = new CMSEntities(); User user = entity.Users.Where(u => u.Email == Login && u.Password == Passwd).SingleOrDefault(); if (user != null) { FormsAuthentication.SetAuthCookie(Login, false); Session.SetUserInfo(user); return View("Index"); }else{ return View("Login"); } } [Authorize] public ActionResult Logout() { FormsAuthentication.SignOut(); Session.Clear(); return View("Index"); } } } |