2012-03-14 1 views
3

Я потратил столько часов на это, что это безумие.проблемы с cookie в asp.net. Возвращаемые значения после response.redirect

У меня есть страница базовый класс, который содержит функцию «SetCookie», и это в основном это:

 Dim context As HttpContext = System.Web.HttpContext.Current 

     If context.Request.Cookies(cookieName) Is Nothing Then 
      Dim cookie As HttpCookie 
      cookie.Value = cookieValue 
      cookie.Expires = DateTime.Now.AddDays(7) 
      context.Response.Cookies.Add(cookie) 
     Else 
      Dim cookie As HttpCookie = context.Request.Cookies(cookieName) 
      cookie.Expires = DateTime.Now.AddDays(7) 
      cookie.Value = cookieValue 
     End If 

Эта функция вызывается простой страницы ASPX. Поскольку это в тестовой среде, в cookie я использую предыдущее значение «123». Если я использую окно отладки и просмотра, я вижу, что значение изменилось на «168» успешно.

У меня есть точка отладки останова на линии, которая:

  Response.Redirect("overview.aspx", False) 

Когда точка останова активна, значения в окне просмотра являются:

currProjectID 168 Integer 
    HttpContext.Current.Request.Cookies("currProjectID").Value "168" String 

(currProjectID является собственностью в классе basepage, который получает/устанавливает cookie с указанной выше функцией)

Теперь, после того, как я перешагнул линию останова, используя «F10», значения переменной изменяются!

HttpContext.Current.Request.Cookies("currProjectID").Value "123" String 
    currProjectID 123 Integer 

Это безумие! Код нигде отсутствует, точка отладки находится непосредственно под строкой «response.redirect» выше, и все же значения сразу же изменились на то, чем они были раньше! Ничто не приблизилось к рутине «setcookie», поэтому, пожалуйста, пожалуйста, кто-то спасет мое безумие и скажет мне, что происходит не так !?

+0

Я продолжал играть с ним. Еще нет радости :-(В окне немедленных наблюдений отображается правильное обновленное значение, пока я не перейду через строку «response.redirect», после чего он мгновенно изменится на свое начальное значение и не пропустит функцию «setcookie». не видят, как это значение может быть изменено таким образом. – TheMook

+0

Остановилось. Вернулись к переменным на основе сеанса на сервере SQL. – TheMook

ответ

3

Вы должны: - получить печенье из запроса - обновления печенья - отправить печенье в ответ

Если вы не послали печенье в ответ, браузер будет ничего об изменении знаешь !!! Cookies не настолько умны, чтобы обновлять себя.

Надеюсь, это поможет.

UPDATE

var cookieDetails = Request.Cookies["yourCookie"]; 
if (cookieDetails != null) 
{ 
    cookieDetails.Values["someValue"] = valueToAssign; 
} 
else 
{ 
    cookieDetails = new HttpCookie("yourCookie"); 
    cookieDetails.Values.Add("someValue", valueToAssign); 
} 
Response.Cookies.Add(cookieDetails); 

этот пример устанавливает куки. как вы можете видеть, первый бит проверяет, существует ли файл cookie, а второй просто создает новый файл cookie.

вам не хватает последний бит, который отправляет куки обратно в браузер

Response.Cookies.Add(cookieDetails); 

Надеется, что это помогает.

+0

Да, мы можем точно получить значение cookie таким образом, как вы упомянули, и, надеюсь, OP делает то же самое – Pankaj

+0

Я не понимаю, извините ... Этот бит кода от моей функции делает именно это, не так ли? Dim cookie Как HttpCookie = context.Request.Cookies (cookieName) cookie.Expires = DateTime.Now.AddDays (7) cookie.Value = cookieValue – TheMook

+0

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

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