Вопрос:

Использование Cookie в Asp.Net Mvc 4

c# asp.net-mvc-4 cookies action httpcookie

110865 просмотра

3 ответа

6131 Репутация автора

У меня есть веб-приложение в Asp.Net MVC4, и я хочу использовать cookie для входа и выхода пользователя. Итак, мои действия следующие:

Действие входа

    [HttpPost]
    public ActionResult Login(string username, string pass)
    {
        if (ModelState.IsValid)
        {
            var newUser = _userRepository.GetUserByNameAndPassword(username, pass);
            if (newUser != null)
            {
                var json = JsonConvert.SerializeObject(newUser);

                var userCookie = new HttpCookie("user", json);
                userCookie.Expires.AddDays(365);
                HttpContext.Response.Cookies.Add(userCookie);

                return RedirectToActionPermanent("Index");
            }
        }
        return View("UserLog");
    }

LogOut Action

    public ActionResult UserOut()
    {
        if (Request.Cookies["user"] != null)
        {
            var user = new HttpCookie("user")
                {
                    Expires = DateTime.Now.AddDays(-1),
                    Value = null
                };
            Response.Cookies.Add(user);
        }
        return RedirectToActionPermanent("UserLog");
    }

И я использую этот файл cookie в _Loyout следующим образом:

@using EShop.Core
@using Newtonsoft.Json
@{
   var userInCookie = Request.Cookies["user"];
}
...
  @if (userInCookie != null && userInCookie.Value)
  {
        <li><a href="#">Salam</a></li>
        <li><a href="@Url.Action("UserOut", "Home")">Cıxış</a></li>
  }
  else
  {
        <li><a href="@Url.Action("UserLog", "Home")">Giriş</a></li>
  }

Но когда я нажимаю * UserOut * действие, это действие происходит в первый раз, но потом оно не работает. Я поставил точку останова для поиска процесса, но он получает действие UserLog, а не UserOut . Мой вопрос заключается в том, где я использую неправильный способ cookie? Каков наилучший способ использования файлов cookie в Asp.Net Mvc4 для этого сценария?

Автор: Elvin Mammadov Источник Размещён: 02.10.2013 01:13

Ответы (3)


71 плюса

1725 Репутация автора

Решение

Попробуйте использовать Response.SetCookie(), потому что Response.Cookies.Add()может привести к добавлению нескольких файлов cookie, в то время как SetCookieобновит существующий файл cookie.

Автор: GvM Размещён: 02.10.2013 04:23

14 плюса

2840 Репутация автора

Мы используем Response.SetCookie () для обновления старых файлов cookie, а Response.Cookies.Add () используются для добавления новых файлов cookie. Здесь ниже код CompanyId является обновлением в старом cookie [OldCookieName].

HttpCookie cookie = Request.Cookies["OldCookieName"];//Get the existing cookie by cookie name.
cookie.Values["CompanyID"] = Convert.ToString(CompanyId);
Response.SetCookie(cookie); //SetCookie() is used for update the cookie.
Response.Cookies.Add(cookie); //The Cookie.Add() used for Add the cookie.
Автор: Anil Singh Размещён: 01.10.2014 07:05

2 плюса

40982 Репутация автора

userCookie.Expires.AddDays(365); 

Эта строка кода ничего не делает. Это эквивалент:

DateTime temp = userCookie.Expires.AddDays(365); 
//do nothing with temp

Вы, вероятно, хотите

userCookie.Expires = DateTime.Now.AddDays(365); 
Автор: Jonathan Allen Размещён: 28.12.2017 08:47
Вопросы из категории :
32x32