Изменение значения файла 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));
}

2 ответов


попробуйте добавить .Value

context.Response.Cookies["user_id"].Value = user.ID.ToString();

по словам сайт MSDN, вы должны написать новый файл cookie с тем же именем, а не просто изменить его:

изменение и удаление Cookies

вы не можете напрямую изменить файл 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);

Я согласен с первым постом о добавлении .Значение свойства, а затем, возможно, добавить .И посмотрим, что получится.