Изменение значения cookie в HttpHandler - PullRequest
7 голосов
/ 10 июня 2011

У меня есть файл 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 ]

6 голосов
/ 10 июня 2011

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

context.Response.Cookies["user_id"].Value = user.ID.ToString();
4 голосов
/ 10 июня 2011

Согласно сайту 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);

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

...