Tutorial de ASP.NET
Vista Previa de ASP.NET 2.0

Migrando Perfiles Anónimos a Perfiles Autenticados

En Ejemplos anteriores quedó demostrado que el color de fondo para un usuario anónimo era pasado al usuario autenticado. Podemos verificar esto ejecutando el ejemplo de abajo. Si ya nos hemos autenticado, hacemos click en el vínculo de Logout al final de la página. En la página de inicio, seleccionamos un color diferente del dropdown en la esquina superior izquierda de la página. La página de inicio se refrescara y se mostrará usando el color de fondo seleccionado. Además, la página tendrá un texto diciendo "Hello Anonymous User" porque la propiedad name en el Profile es solo soportada por usuarios autenticados. Autentiquémonos en el sitio usando el control login de la página de inicio. Notamos como una vez nos autenticamos, el color de fondo de la página del perfil refleja la selección que se hizo previamente como un usuario anónimo.

En la página de propiedades del perfil, hacemos clic en el link que nos lleva de vuelta a la página de inicio. Observad que en la página de inicio el nombre que se muestra está basado en el valor establecido para la propiedad Profile.Name. Ahora que estamos de vuelta en la página de inicio como usuarios autentificados, seleccionamos un color diferente de la lista desplegable y hacemos clic en el botón a actualizar. La página se refresca y usa el color de fondo actualizado. Si posteriormente hacemos clic en el link que os lleva de vuelta a la página de propiedades del perfil veremos que el color de fondo se mantiene.

Una vez que estemos de vuelta en la página de propiedades del perfil hacemos clic en el botón de desconexión. Esto nos redirigirá de vuelta a la página de inicio. Daos cuenta que cuando se nos redirige a la página de inicio nuestras selecciones previas para el color de fondo ya no son efectivas. Hay dos razones para esto. Primeramente, una vez que nos hemos desconectado el sitio considera que somos usuarios anónimos y como resultado cualquier color de fondo que hubiera sido seleccionado en el perfil de usuario autentificado no está disponible. En segundo lugar, cualquier selección de color que hubiera sido hecha anteriormente como usuario anónimo ya no está disponible. La razón para esto es que una vez que un usuario anónimo se autentifica, la cookie que contenía el identificador anónimo autogenerado se borra del navegador. Como resultado, cuando nos autentificamos y posteriormente nos volvemos a desconectar el sitio considera que somos usuarios anónimos completamente nuevos. Esta interacción entre usuarios anónimos y usuarios autentificados conduce a la necesidad de migrar datos desde los perfiles anónimos hacia los perfiles autentificados.

La característica de perfil expone un evento llamado MigrateAnonymous. Podemos suscribirnos a este evento colocando un manejador de eventos en global.asax llamado Profile_MigrateAnonymous. Este evento se dispara simpre que un identificador anónimo está disponible (bien como una cookie o bien como un ticket sin cooquies) y el usuario se autentifica. En el manejador de eventos podemos cargar el Perfil del usuario anónimo llamando a Profile.GetProfile y pasándole el ID de usuario anónimo (el ID de usuario anónimo es una de las propiedades disponibles de los argumentos del evento). Una vez que tenéis una referencia al Perfil anónimo podemos transferir las propiedades establecidas desde el Perfil anónimo hacia el Perfil autentificado. El global.asax del ejemplo demuestra la transferencia del color de fondo desde el perfil anónimo al perfil autentificado. El código también elimina el perfil anónimo de la base de datos. Finalmente, el código llama a un método en identificación anónima para eliminar la cookie que contiene el identificador anónimo. Observad que los programadores deben elegir explícitamente eliminar el identificador anónimo en la petición, de otro modo ASP.NET no eliminará automáticamente el identificador. Cuando el evento MigrateAnonimous finalice, ASP.NET habrá expedido una cabecera Http para eliminar el identificador anónimo en el navegador y en la siguiente petición de página el evento no se volverá a disparar

C# Migrando datos de perfil de un usuario anónimo a un usuario autenticado