Я создаю HttpCookie, задаю только имя и значение, а не свойство expires, а затем добавляю его в ответ. Достаточно просто. Файл cookie создается (но не сохраняется), как ожидалось. Проблема в том, что когда сеанс меняется по какой-то причине (например, веб-сайт был перестроен или я перестроил свое приложение при отладке), тогда cookie-файлы остаются. Я хочу, чтобы файл cookie действовал только для исходного сеанса, в котором он был создан.
Согласно MSDN, в нем говорится: «Если вы не укажете ограничение срока действия файла cookie, файл cookie не будет сохранен на клиентском компьютере и срок его действия истечет после истечения сеанса пользователя».
Полагаю, я не знаю точно, что означает "сессия истекает". Я полагаю, что cookie удаляется через 20 минут после окончания сеанса. Но следует ли удалить cookie, если сеанс, в котором он был создан, больше не существует по ряду причин? Единственный раз, когда я видел удаление куки, это когда пользователь закрывает все окна браузера и открывает новое.
Если это все так, мне, возможно, придется сохранить исходный идентификатор сеанса («ASP.NET_SessionId») в файле cookie, затем проверить его по текущему идентификатору сеанса, если они отличаются, затем удалить файл cookie или создать новый.
Вот код (единственное различие между моим файлом cookie и тем, что в примерах MSDN, я храню несколько значений в файле cookie):
private void SaveValuesToCookie(string[] names, string[] values)
{
HttpCookie cookie = new HttpCookie("MyCookie");
for (int i = 0; i < names.Length; i++)
{
string name = names[i];
cookie.Values[name] = values[i];
}
Response.Cookies.Add(cookie);
}
private string GetValueFromCookie(string name)
{
HttpCookie cookie = Request.Cookies["MyCookie"];
if (cookie == null)
return null;
return cookie.Values[name];
}