ASP.NET MVC Cookie实现

我尝试在我的应用程序中实现一个基本的cookie帮助器。 主要是我每次检查基本控制器是否设置了cookie。 如果是cookie

public class MyCookie { public static string CookieName {get;set;} public virtual User User { get; set; } public virtual Application App { get; set; } public MyCookie(Application app) { CookieName = "MyCookie" + app; App = app; } public void SetCookie(User user) { HttpCookie myCookie = HttpContext.Current.Request.Cookies[CookieName] ?? new HttpCookie(CookieName); myCookie.Values["UserId"] = user.UserId.ToString(); myCookie.Values["LastVisit"] = DateTime.Now.ToString(); myCookie.Expires = DateTime.Now.AddDays(365); HttpContext.Current.Response.Cookies.Add(myCookie); } public HttpCookie GetCookie() { HttpCookie myCookie = HttpContext.Current.Request.Cookies[CookieName]; if(myCookie != null) { int userId = Convert.ToInt32(myCookie.Values["UserId"]); User user = session.Get(userId); return user; } return null; } } 

如果session为null我尝试从cookie获取或者如果session初始化我设置cookie但我从未在浏览器中看到我的cookie。 怎么了?

我总是开始会话,但用userId = 0要从cookie获取cookie并设置会话:

 if (userId == 0) { MyCookie myCookie = new MyCookie(_app); User user = cookieHelper.GetCookie(); if (user != null) SessionHelper.SetSession(user); } 

您无法在同一请求中设置和获取cookie。 获取一个cookie从浏览器中获取它还没有得到它 – 设置一个cookie会使它在请求完成时作为标题的一部分发送回来。

您需要设置cookie并让浏览器重定向到其他地方(例如从/ login到/ account)然后在新请求上读取它将正确显示cookie。

编辑:如果猜测错误,我也会质疑你实际调用的地方.SetCookie()在你提供的代码中没有任何地方你实际上是在调用它来创建cookie。

为了调试这些东西,我发现你可以使用你认为应该工作的代码来测试它们。 例如,在新页面的page_load中我输入了:

 string CookieName = "bob"; long UserId = 4; HttpCookie myCookie = HttpContext.Current.Request.Cookies[CookieName] ?? new HttpCookie(CookieName); myCookie.Values["UserId"] = UserId.ToString(); myCookie.Values["LastVisit"] = DateTime.Now.ToString(); myCookie.Expires = DateTime.Now.AddDays(365); HttpContext.Current.Response.Cookies.Add(myCookie); 

并且cookie正确显示没有问题。 因此,知道这段代码确实有效,我们可以假设错误是没有被调用的函数,或者你正在进行的测试/调试是试图在同一个请求中设置和读取cookie并且失败(正如我最初所说)

祝你好运!

我的工作实施(基本版)

 public class CookieHelper { public static string CookieName {get;set;} public virtual Application App { get; set; } public MyCookie(Application app) { CookieName = "MyCookie" + app; } public static void SetCookie(User user, Community community, int cookieExpireDate = 30) { HttpCookie myCookie= new HttpCookie(CookieName); myCookie["UserId"] = user.UserId.ToString(); myCookie.Expires = DateTime.Now.AddDays(cookieExpireDate); HttpContext.Current.Response.Cookies.Add(myCookie); } } 

如果session / cookie为null(实际上userid = 0)

 if (userId == 0){ CookieHelper myCookie = new Cookie(_app); if (myCookie != null) { userId = Convert.ToInt32(System.Web.HttpContext.Current.Request.Cookies[myCookie.CookieName]["userId"]); if(userId>0) { SessionHelper.SetSession(userId); } } } 

试试这个

 HttpCookie cookie = new HttpCookie("Remember_Me"); cookie["userID"] = Userid.ToString(); cookie.Expires = DateTime.Now.AddMonths(3); Response.Cookies.Add(cookie);