ASP.NET Cookie Expires значение сбрасывается на Response.Redirect? - PullRequest
3 голосов
/ 15 января 2009

У меня есть скрипт, который читает форму и помещает некоторую информацию в cookie:

Dim oCookie as HttpCookie
oCookie = New HttpCookie("authInfo")
Select Case oResult
Case "No ClientID", "No Password", "No PracType", "No Encrypt", "CRC Mismatch"
    oCookie.Values.Add("LoggedIn", "False")
    oCookie.Values.Add("OnSupport", "False")
Case "Client Can Update"
    oCookie.Values.Add("LoggedIn", "True")
    oCookie.Values.Add("OnSupport", "True")
Case "Client Cannot Update"
    oCookie.Values.Add("LoggedIn", "True")
    oCookie.Values.Add("OnSupport", "False")
End Select
oCookie.Expires = DateTime.Now.AddHours(2)
HttpContext.Current.Response.Cookies.Add(oCookie)
HttpContext.Current.Response.Redirect("default.aspx")

Время правильно устанавливается перед перенаправлением, но когда я пытаюсь распечатать это значение таким образом (я также пытался Dim oCol as HttpCookieCollection = Request.Cookies, но получаю тот же результат):

Response.Output.WriteLine(Request.Cookies("authInfo").Expires.ToString)

Время всегда сбрасывается "01/01/0001 12:00:00 AM". Я что-то упускаю из-за того, что cookie не содержит значение Expires?

Ответы [ 4 ]

11 голосов
/ 15 января 2009

Request.Cookies и Response.Cookies и использование общего объекта cookie создают интуитивную идиому, но на самом деле cookie-запрос Request и кукла Response совершенно различны.

Когда вы назначаете Cookie в ответе, к выходу добавляется заголовок Set-Cookie, который будет содержать не только значение, но также путь и значение expiries.

Однако, когда браузер отправляет куки обратно на сервер в другом запросе, он просто включает имя и значение куки. Это не отправляет путь или истекает информация.

Следовательно, эти свойства не имеют смысла при использовании коллекции Request.Cookies.

5 голосов
/ 07 марта 2012

Я знаю, что это старая ветка, и, вероятно, @Anders перешел к большему и лучшему. Тем не менее, я наткнулся на это после того, как столкнулся с той же проблемой, пытаясь сохранить файлы cookie проверки подлинности Office 365 в моем текущем HttpContext. Достаточно сказать, что ответ @AnthonyWJones прояснил мне много интуиции в отношении файлов cookie. Это для любого, как я, кто, возможно, натолкнулся на эту тему, и, несмотря на обмен информацией, не смог найти обходной путь для поддержания даты истечения срока действия cookie. Вот что я наконец-то предпринял: 1. Перед тем, как файл cookie (срок действия которого необходим) добавлен в HttpResponse, я сохранил дату его окончания и домен в моей БД. 2. Затем к ответу можно добавить cookie-файл с неизменными основными свойствами, такими как «Имя» и «Значение». 3. После того, как куки-файл получен из запроса, я создал новый куки-файл с доменом и датами истечения срока действия, полученными из БД, и остальными свойствами, как есть. После этого я смог использовать эти файлы cookie для отправки дальнейших запросов на целевой сайт.

0 голосов
/ 12 августа 2009

Если вы хотите проверить срок годности, вы можете добавить его в коллекцию значений cookie. Затем найдите его и выполните проверку.

0 голосов
/ 15 января 2009

Я столкнулся с такой проблемой, когда исходный запрос пришел из другого домена.
убедитесь, что вы также добавили домен для файла cookie.

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