Blog de Francisco Velázquez

otro blog personal

Gestión de sesiones en ASP.NET para Mobile Web

with 2 comments

Cuando se realiza un desarrollo de Mobile Web nos enfrentamos con unos problemas y algunas ventajas con respecto a la web de escritorio. En este post vamos a ofrecer una mejora en el gestor de sesiones web de ASP.NET.

La mayoría de los problemas que se nos presentarán, vienen por los WAP proxies que instalan los operadores o bien por otros transcoders externos como los de Google. Uno de los problemas que se presentan es que algunos no soportan cookies y por lo tanto nuestras sesiones se pierden.

Sin embargo, como hemos dicho no todo son problemas también tenemos herramientas de identificación de usuario y demás sistemas de cobro integrados con la factura de teléfono. Estos servicios pueden ser ofrecidos por los propios operadores o por diversos agregadores. La mayoría de estos sistemas tienen en común que de alguna u otra manera se debe realizar una redirección al usuario (consumidor) a su servicio para que ellos confirmen la identidad del usuario y redirijan de nuevo a nuestra aplicación.

Bueno como se puede imaginar nuestro gestor de sesiones va a ser una variación de cookieless, en la cual vamos a usar una Guid para identificar la sesión, por simplificar este identificador será el ID del consumidor, que estará persistido en base de datos. Por tanto, la idea será  heredar de SessionIDManager.

public class SessionIdManager : System.Web.SessionState.SessionIDManager
    {
        public override string CreateSessionID(System.Web.HttpContext context)
        {
            CarrierIdentificator identificator = new CarrierIdentificator();
            Guid sessionId = Guid.Empty;

            IConsumer consumer = CookieHelper.Get(context);

            if (consumer == null)
                consumer = identificator.Get(context);

            if (consumer != null)
                sessionId = consumer.Id;

            CookieHelper.Save(context, consumer);

            return sessionId.ToString("N");
        }

        public override bool Validate(string id)
        {
            // TODO validate session
        }
    }

También tendremos que registrar el session manager:

<system.web> 
        <sessionState cookieless="true" sessionIDManagerType="namespace.SessionIdManager" />
        ....
</system.web> 

Written by fravelgue

July 5, 2010 at 6:17 pm

Posted in development

Tagged with , , ,

2 Responses

Subscribe to comments with RSS.

  1. Hola Francisco. Estoy desarrollando una aplicación web móvil con .Net y Quisiera saber si me puedes dar un ejemplo en donde se aplique esta forma de gestionar las sesiones. De antemano, muchas gracias.

    Yeison Salinas

    October 5, 2010 at 7:27 pm

    • Hola Yeison, creo que el post es bastante explicativo de como implementar las sesiones. He modificado el post para incluir el registro del session manager.

      Lo único que he dejado sin comentar sería la identificación del operador. Hay algunos agregadores que proporcionan esta información, pero la mayoría de los operadores incluyen alguna cabeceera http que identifica al usuario final cuando navega por sus WAP gateways.

      fravelgue

      October 5, 2010 at 7:57 pm


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: