2011-06-10 17 views
7

Tengo una galleta que estoy usando para persistir ID de usuario de un usuario pero estoy teniendo un tiempo difícil reemplazarlo con un nuevo valor. De acuerdo con MSDN, debería ser capaz de simplemente sobrescribir el valor, pero no ha estado funcionando. Estoy haciendo la lógica de inicio de sesión en un controlador y paso al usuario a una nueva página web si tienen éxito.Modificación de Valor de una cookie en un HttpHandler

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); 
} 

La primera vez que inicie sesión en la que funciona bien, pero si trato de sobrescribir mi galleta actual pulsando el controlador con un nuevo identificador de usuario, que no cambia el valor de la cookie y lo sigo estando conectado como el usuario que era cuando lo golpeé.

Otras páginas usan la cookie para iniciar sesión, pero como la identificación del usuario no cambia, no cambia el usuario que inició sesión.

public User User { get; set; } 

public override void Page_Load() 
{ 
    this.User = User.Find(int.Parse(Request.Cookies["user_id"].Value)); 
} 

Respuesta

6

Trate de añadir .Value

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

Disculpa, eso fue en realidad un error tipográfico. El código ni siquiera se compilará si lo haces sin el '.Value'. –

+1

¿Necesitamos verificar si la cookie existe antes de modificar su valor? En otras palabras, ¿habrá error si la cookie no existe e intentamos modificar el valor de una cookie que no existe? – sajanyamaha

+0

sí, si la cookie es nulo, no se puede acceder a su propiedad Value – carlbenson

4

De acuerdo con la MSDN site, que tienen escribir una nueva cookie con el mismo nombre, no sólo modificarlo:

modificar y borrar las cookies

No se puede mo directamente dify una cookie. En cambio, cambiar una cookie consiste en creando una nueva cookie con los nuevos valores y luego enviando la cookie al explorador para sobrescribir la versión anterior en el cliente. El siguiente código ejemplo muestra cómo se puede cambiar el valor de una cookie que almacena un conteo de las visitas del usuario al sitio:

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); 

yo estaría de acuerdo con el primer post acerca de la adición de la. Valore la propiedad y luego agregue el .Expire también y vea qué sucede.

+0

qué necesitamos para comprobar si existe la galleta antes de modificar su valor, es decir va a error si no lo existe galletas y tratamos de modificar el valor de una cookie que no existe? – sajanyamaha

Cuestiones relacionadas