C # Cookie - свойство Expires не будет установлено - PullRequest
6 голосов
/ 29 декабря 2011

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

Мой код для записи куки:

private void SetCookie()
{
    Response.Cookies.Add(new HttpCookie("Cookie_SessionID"));
    Response.Cookies["Cookie_SessionID"].Value = ni.NicheSessionID;
    Response.Cookies["Cookie_SessionID"].Expires = DateTime.Now.AddMinutes(40);

    //.... after a few more things
    Response.Redirect(returnUrl);
}

Тогда на странице получения у меня это:

private HttpCookie GetCookie()
{
    HttpCookie cookie = Request.Cookies["Cookie_SessionID"];
    if (cookie != null && cookie.Value != null)
    {            
        return cookie;
    }
    return null;        
}

По какой-то причине файл cookie, возвращаемый GetCookie(), всегда имеет значение Expires 0001-01-01 00:00:00, хотя при просмотре файлов cookie в браузере у него правильное время истечения.

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

Моя проблема в том, что я хочу зафиксировать именно это - срок действия куки-файла «истек», и поэтому они должны снова войти в систему - но мне нужно отобразить сообщение в виде «Я знаю, что вы уже вошли в систему, но вы Нужно будет сделать это снова "типа вещь.

Спасибо

Ответы [ 2 ]

12 голосов
/ 29 декабря 2011

Браузер не будет отправлять на сервер ничего, кроме имени и значения файла cookie.Все остальные свойства (expires, domain, path, httponly, ...) не могут быть получены по запросам после того, как cookie был установлен.

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

Более приемлемый способ справиться с этим - перенаправить пользователя настраницу входа, когда они пытаются получить доступ к защищенному ресурсу и отображают какое-то сообщение в виде строки «Вам необходимо войти в систему, чтобы просмотреть эту страницу. Если вы ранее вошли в систему, ваш сеанс, возможно, истек.»

(Также обратите внимание, что вы должны переустанавливать cookie-файл при каждом запросе, чтобы пользователь не вышел из системы, если он продолжает использовать сайт. Из вашего кода не ясно, делаете ли вы это или нет.)

4 голосов
/ 29 декабря 2011

Протокол HTTP не отправляет даты истечения срока действия файлов cookie на сервер.

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