cookie не обновляется до обновления страницы ... как этого избежать? - PullRequest
3 голосов
/ 16 февраля 2011

У меня есть несколько страниц asp.net, которые читают и записывают значения cookie.В течение жизненного цикла страницы она может обновить значение файла cookie, а затем снова прочитать его в коде.Я обнаружил, что он не получает последнее значение cookie, пока страница не обновится.Это можно обойти?Вот код, который я использую для установки и получения значений.

public static string GetValue(SessionKey sessionKey)
        {
            HttpCookie cookie = HttpContext.Current.Request.Cookies[cookiePrefix];
            if (cookie == null)
                return string.Empty;

            return cookie[sessionKey.SessionKeyName] ?? string.Empty;
        }

        public static void SetValue(SessionKey sessionKey, string sessionValue)
        {
            HttpCookie cookie = HttpContext.Current.Request.Cookies[cookiePrefix];
            if (cookie == null)
                cookie = new HttpCookie(cookiePrefix);

            cookie.Values[sessionKey.SessionKeyName] = sessionValue;
            cookie.Expires = DateTime.Now.AddHours(1);
            HttpContext.Current.Response.Cookies.Set(cookie);
        }

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

Что вам не хватает, так это то, что когда вы обновляете cookie с помощью SetValue, вы пишете в коллекцию Response.Cookies.

Когда вы вызываете GetValue, вы читаете из коллекции Request.Cookies.

Вам необходимо хранить информацию о переходных процессах таким образом, чтобы вы получали доступ к текущей информации, а не только непосредственно к куки-файлу запроса.

Один из возможных способов сделать это - написать класс-оболочку, который с грубым псевдо-кодом будет похож на

public CookieContainer(HttpContext context)
{    
    _bobValue = context.Request.Cookies["bob"];    
}

public Value
{    
    get { return _bobValue; }
    set { 
            _bobValue = value; 
            _context.Response.Cookies.Add(new Cookie("bob", value) { Expires = ? }); 
        }    
}

Я столкнулся с необходимостью сделать подобный код только на этой неделе. Модель обработки печенья очень странная.

1 голос
/ 16 февраля 2011

Начните использовать сеансы для хранения вашей информации, даже если она временная.

Файлы cookie основаны на заголовке, который отправляется в браузер до отображения страницы. Если вы уже отправили информацию клиенту, а затем приступили к установке файла cookie, вы увидите описанную вами «задержку обновления страницы».

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

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