Почему мое печенье не установлено? - PullRequest
6 голосов
/ 18 декабря 2010

Я снова играю с ASP.NET и попытался установить cookie в одном действии, которое будет прочитано в другом действии.

Странная вещь: cookie устанавливается, но теряет свое значение при доступе к другой странице. Вот мой простой код контроллера:

public class HomeController : Controller
{
    public ActionResult About()
    {
        var cookie = Response.Cookies.Get("sid");
        ViewData["debug"] = "Id: " + cookie.Value;

        return View();
    }

    public ActionResult DoLogin()
    {
        var cookie = new HttpCookie("sid", Guid.NewGuid().ToString());
        cookie.HttpOnly = true;
        Response.Cookies.Add(cookie);

        return RedirectToAction("About");
    }
}

Поток выглядит так: сначала я получаю доступ к /Home/DoLogin, затем меня перенаправляют на /Home/About, который должен фактически вывести значение куки sid. Но печенье не имеет никакой ценности.

  • Cookies не отключены в моем браузере
  • Я знаю, что ASP.NET имеет свой собственный механизм обработки сеансов, просто поигрался и наткнулся на эту проблему с cookie

Спасибо за любые подсказки!

1 Ответ

9 голосов
/ 18 декабря 2010

В вашем действии About используйте Request.Cookies.

В качестве краткого объяснения: когда вы устанавливаете что-то в Response.Cookies, этот cookie отправляется клиенту, который его хранит. При каждом последующем запросе к одному и тому же пространству имен, до истечения срока действия, клиент отправляет этот файл cookie на сервер, который сохраняет его в Request.Cookies.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...