2016-01-21 48 views
1

我設置cookie的登錄成功的時候是這樣的:MVC 5設置cookie的到期,但到期回01/01/0001

public JsonResult LoginWithPassword(String password) 
     { 

       Response.Cookies.Remove("Auth"); 
       string CookieName = "Auth"; 
       long UserId = 4; 

       HttpCookie myCookie = HttpContext.Response.Cookies[CookieName] ?? new HttpCookie(CookieName); 
       myCookie.Values["UserId"] = UserId.ToString(); 
       myCookie.Values["LastVisit"] = DateTime.Now.ToString(); 
       myCookie.Expires = DateTime.Now.AddDays(1); 
       HttpContext.Response.Cookies.Add(myCookie); 

       return Json(new { IsSuccess = true, ReturnUrl = returnUrl }); 
      } 
      else 
      { 
       return Json(new { IsSuccess = false, Message = "Login fail, Wrong Password" }); 
      } 
     } 

,我在翻頁/動作閱讀:

public ActionResult Index() 
     { 
      if (HttpContext.Request.Cookies["Auth"] == null) 
       return RedirectToAction("Login", "Access"); 
      return View(); 
     } 

真的很奇怪「Auth」的Cookie總是空的。當我在調試斷點檢查過期日期時,我獲得了到期日期:01/01/0001

爲什麼發生這種情況以及如何解決這個問題? 此操作在兩個不同的控制器中

回答

1

我試圖實現您的代碼來創建cookie。在firefox瀏覽器中,相同的代碼在MVC5中工作正常。 我用下面的代碼來創建的cookie -

Response.Cookies.Remove("Auth"); 
       string CookieName = "Auth"; 
       HttpCookie cookie = HttpContext.Response.Cookies[CookieName] ?? new HttpCookie(CookieName); 

//HttpCookie cookie = new HttpCookie("Cookie"); 

cookie.Value = "Hello Cookie! CreatedOn: " + DateTime.Now.ToShortTimeString(); 

cookie.Expires = DateTime.Now.AddDays(5); 
      this.ControllerContext.HttpContext.Response.Cookies.Add(cookie); 

另外的 「驗證」 的cookie檢查成功指數頁面上 -

公衆的ActionResult指數()

{ 
     if (HttpContext.Request.Cookies["Cookie"] == null) 
      return RedirectToAction("Login", "Account"); 
     return View(); 
    } 

或者,我建議 1)在登錄頁面創建cookie後設置到期2)在有效期內添加小數點,例如。 1.0或5.0。請參閱文章鏈接 - http://forums.asp.net/t/1982279.aspx?MVC5+Application+Cookie+expires+when+session+ends

讓我知道這是否對您有幫助。

+0

感謝您的解決方案。老實說我找到了一些東西。如果我在動作代碼中使用斷點,cookie過期變爲01/01/0001我不知道爲什麼會發生這種情況。我嘗試刪除所有斷點,應用程序工作順利 – yozawiratama