Изменение значения cookie в HttpHandler

#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, которого не существует?