Blog de Francisco Velázquez

otro blog personal

Posts Tagged ‘cookiless

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 , , ,