#c# #asp.net #cookies #httphandler
#c# #asp.net #файлы cookie #httphandler
Вопрос:
У меня есть файл cookie, который я использую для сохранения идентификатора пользователя, но мне сложно заменить его новым значением. Согласно MSDN, я должен быть в состоянии просто перезаписать значение, но это не работает. Я выполняю логику входа в обработчике и передаю пользователя на новую веб-страницу, если они преуспевают.
public void ProcessRequest(HttpContext context)
{
User user = User.FindByUsernameAndPassword(
context.Request.Form["username"],
context.Request.Form["password"]);
context.Response.Cookies["user_id"].Value = user.ID.ToString();
context.Response.Redirect("/profile", true);
}
При первом входе в систему это работает хорошо, но если я попытаюсь перезаписать свой текущий cookie, введя в обработчик новый идентификатор пользователя, это не изменит значение cookie, и я продолжу входить в систему как пользователь, которым я был, когда нажимал на него.
Другие страницы используют cookie для входа в систему, но поскольку идентификатор пользователя не меняется, это не приводит к изменению зарегистрированного пользователя.
public User User { get; set; }
public override void Page_Load()
{
this.User = User.Find(int.Parse(Request.Cookies["user_id"].Value));
}
Ответ №1:
Попробуйте добавить .Value
context.Response.Cookies["user_id"].Value = user.ID.ToString();
Комментарии:
1. Извините, на самом деле это была опечатка. Код даже не будет компилироваться, если вы сделаете это без
.Value
.2. нужно ли нам проверять, существует ли cookie, прежде чем изменять его значение, другими словами, будет ли выдано сообщение об ошибке, если cookie не существует, и мы попытаемся изменить значение cookie, которого не существует?
3. да, если файл cookie равен null, вы не можете получить доступ к его свойству Value
Ответ №2:
Согласно сайту MSDN, вы должны записать новый файл cookie с тем же именем, а не просто изменить его:
Изменение и удаление файлов cookie
Вы не можете напрямую изменять файл cookie. Вместо этого изменение файла cookie заключается в создании нового файла cookie с новыми значениями и последующей отправке файла cookie в браузер для перезаписи старой версии на клиенте. Следующий пример кода показывает, как можно изменить значение файла cookie, в котором хранится количество посещений пользователем сайта:
int counter;
if (Request.Cookies["counter"] == null)
counter = 0;
else
{
counter = int.Parse(Request.Cookies["counter"].Value);
}
counter ;
Response.Cookies["counter"].Value = counter.ToString();
Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1);
Я бы согласился с первым сообщением о добавлении свойства .Value, а затем, возможно, также добавьте .Expires и посмотрите, что произойдет.
Комментарии:
1. нужно ли нам проверять, существует ли cookie, прежде чем изменять его значение, другими словами, будет ли ошибка, если cookie не существует, и мы попытаемся изменить значение cookie, которого не существует?