проблемы с cookie в asp.net. Возвращение значений после response.redirect - PullRequest
3 голосов
/ 14 марта 2012

Я потратил оооочень много часов на это безумие.

У меня есть базовый класс страницы, который содержит функцию "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 - это свойство в классе базовой страницы, которое получает / устанавливает cookie с помощью функции выше)

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

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

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

1 Ответ

3 голосов
/ 14 марта 2012

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

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

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

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, а второй просто создает новый cookie.

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

Response.Cookies.Add(cookieDetails);

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

...