2012-01-23 9 views
8

Im пытается сделать постоянное печенье с помощью C# 4.0 и этот код:Куки не работает в C#

HttpCookie AssoCookie = new HttpCookie("AssociateCode", AssociateCode); 
AssoCookie.Expires = DateTime.Now.AddMonths(6); 
HttpContext.Current.Response.Cookies.Add(AssoCookie); 

К сожалению, это не работает, и куки сессии истекает. Если я использую Web Developer плагин в Firefox, чтобы проверить это я могу видеть эту информацию:

Name AssociateCode 
Value test 
Host localhost 
Path /
Secure No 
Expires At End Of Session 

Куки я делаю как тест его только что созданной там, никто еще управляет его или редактирует его, чтобы он не может быть перезаписаны. В webconfig ничего не установлен, чтобы установить срок действия cookie (в любом случае это должно переопределить это), и если я установил время истечения срока действия cookie, оно не работает.

Я немного потерял сейчас, каждое руководство, учебник, блог, все, что я проверяю, говорит, что вам просто нужно установить дату истечения срока действия, Ive отлаживается, Ive проверил, что это действительно имеет это значение при создании и в конце Page_PreRender, но он просто заканчивается сессией, что бы я ни делал.

Любые идеи?

Im using Firefox 9.0.1 btw.

Update

Использование Firebug плагин в Firefox, чтобы проверить заголовки ответа я получаю это:

Response Headersview source 
Cache-Control private 
Connection Close 
Content-Length 21322 
Content-Type text/html; charset=utf-8 
Date Mon, 23 Jan 2012 16:47:08 GMT 
Server ASP.NET Development Server/10.0.0.0 
Set-Cookie AssociateCode=test; expires=Mon, 23-Jul-2012 16:09:04 GMT; path=/ 
X-AspNet-Version 4.0.30319 

И с помощью Fiddler я получаю это:

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
Set-Cookie: AssociateCode=; expires=Mon, 23-Jul-2012 16:27:29 GMT; path=/ 
X-Powered-By: ASP.NET 
Date: Mon, 23 Jan 2012 17:27:29 GMT 
Content-Length: 21313 

** Обновление 2 * * Я проверяю, что Cookie не существует, просто проверяя файлы cookie моего Firefox, но если вы хотите посмотреть, как Я получаю это позже в коде (не нужно, так как он не там так или иначе):

try { 
    AssociateCode = HttpContext.Current.Request.Cookies.Get("AssociateCode").Value; 
} catch { } 
+0

Вы уверены, что сам файл cookie истекает или истекает срок его действия из-за поведения сеанса? После истечения срока действия сеанса во время отладки файл cookie физически больше не привязан к запросу? –

+0

Если я закрою окно браузера и откройте его снова, файл cookie исчезнет. И это происходит без запроса на страницу. Таким образом, его срок действия действительно «Конец сеанса». –

+0

Я тестировал и не испытывал никаких проблем. Браузер помнил куки-файл даже после его закрытия и снова открывал его. Я бы предложил использовать Fiddler, чтобы просто дважды проверить, что cookie действительно отправляется в браузер с соответствующим заголовком истечения срока действия, и браузер правильно отправляет его обратно на сайт после закрытия/повторного открытия. – MerickOWA

ответ

3

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

На самом деле, если я пошел управлять файлами cookie в Firefox, я мог бы снять флажок «Cookie сеанса» в файле cookie, а дата истечения срока была правильной, но по какой-то причине опция проверки была отмечена по умолчанию. Я думал, что, возможно, есть способ установить, является ли Cookie Session Cookie или нет, или, может быть, .NET что-то делал, пока я не понял это.

Ну, когда ничего не логика, кажется, работает, вы знаете, проблема самая глупая вещь, которую вы можете себе представить ...

Извините еще раз.

+0

Нет проблем для меня, у меня такая же ошибка, и теперь я могу попробовать эти решения, спасибо –

3

Вы пробовали использовать функцию SetCookie вместо Добавить?

HttpCookie cookie = new HttpCookie("test"); 
cookie.Expires = DateTime.Now.AddHours(10); 
HttpContext.Current.Response.SetCookie(cookie); 

Протестировано это быстро, и оно работает для меня.

+0

Приятная попытка, Ive проверил его и не работает. Это должен быть какой-то тип конфигурации IIS или чего-то не хватает. Может ли кто-нибудь хотя бы подтвердить, что это должно сработать? Я начинаю сомневаться в этом сейчас ... –

+0

Да, это должно сработать. Можете ли вы опубликовать HTTP-ответ (заголовок Set-Cookie), чтобы мы могли точно видеть, что сервер испускает? –

+0

Я обновил сообщение с заголовками. –

6

Просто, чтобы следить за мой комментарий:

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

Это заставляет меня думать, что вы неправильно проверяете его существование.

При тестировании, если печенье передано в вашу заявку, вы должны использовать контейнер Request.Cookies, чтобы узнать, есть ли он. (обратите внимание, что это ЗАПРОС не ОТВЕТ).

Если вы испытываете, используя что-то вроде:

if (Response.Cookies["mycookie"] == null) { .. } 

Тогда это вызовет новый куки в объект ответа должен быть создан, что является пустым.

Подводя итог: объект Request будет содержать все, отправленное из браузера. Объект Response - это все, что вы отправляете в браузер.

+0

Да, это хороший совет, иногда это может случиться. Но я знаю разницу между запросом и ответом, и это не так. На самом деле, мне нужно закрыть и открыть окно, найти файл cookie в Cookies Firefox, и он исчез или с помощью плагина Web Developer, он не существует. Поэтому мне даже не нужно проверять, существует ли он с использованием .Net, и если да, я использую Request, а не, конечно. || Пример: try {AssociateCode = Current.Request.Cookies.Get ("AssociateCode"). Значение; } catch {} –

 Смежные вопросы

  • Нет связанных вопросов^_^