0:00 0 0
Mantener la sesion activa mientras el usuario esta conectado en ASP

Mantener la sesion activa mientras el usuario esta conectado en ASP

  DrUalcman |  mayo 242020

Este mes me ha costado encontrar un tema sobre el que hablar, pero hoy se me ha encendido la bombilla. Muchas veces tenemos proyectos web en los que el usuario necesita mucho tiempo para estar dentro de la página, como puede ser, esribir un blog como hago yo ahora mismo. Esto nos genera un pequeño problema con el tema de mantener la sesión del usuario activa, ya que si tenemos un tiempo límite de sesión, digamos, de 30 minutos, el timpo predeterminado normalmente en Internet Information Server, para cuando el usuario ha terminado de escribir su blog, es posible que el tiempo de sesión haya expirado y al hacer click en el botón de guardar la página nos envíe a la página de inicio de sesión, con lo que el usuario puede haber perdido todo lo que estaba escribien. Pues bien, con este pequeño truco que te traigo hoy, podremos mantener la sesión del usuario activa, mientras el usuario está dentro de la página.

La solución es más sencilla de lo que parece

Realmente es muy simple solucionar este tipo de problema, y como ya comenté antes, es más un truco que una solución propiamente dicha. Todo consiste en crear una llamada a algún web service que crearemos, y éste web service tiene que trabajar con la sesión. Es decir. El web service que configuremos debe de ser capaz de acceder a las variables de sesión del usuario.

Básicamente es sólo eso, no se necesita que se modifique ninguna variable de sesión ni nada, pero de paso, ya que estas haciendo una llamada API, pues siempre puedes controlar alguna variable y devolver un resultado, aunque sólo sea un verdadore o falso.

En ASP WebForms

Primero os explico cómo hacerlo en WebForms ya que es en uno de los que más suele afectar este tipo de problemas.

  1. Crearemos un web service, por ejemplo mantenermeactivo.asmx
  2. Crearemos un WebMethod al cual le habilitaremos acceso a la sesión
  3. En la página dónde nos interesa que no se caduque la sesión haremos una llamada a nuestro WebMethod cada cierto tiempo. Este tiempo debe de ser menor que el tiempo límite de la sesión de usuario.
  4. Si nuestro WebMethod devuelve algún valor, realizaremos los cambio necesarios.
Os lo pongo con código que creo que queda más claro.
    [WebMethod(EnableSession = true)]   //importante este detalle para habilitar la sesión en el web service
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public bool MantenermeActivo()
{
// el codigo que haga algo
return true;
}
Y en la página donde queremos que nunca se expire la sesión creamos un script como éste.
    < script >
function MantenermeActivo() {
let xhr; //control compatibilities
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
let url = '/mantenermeactivo.asmx/MantenermeActivo';
let type = "POST";
let content = "application/json; charset=utf-8";

xhr.open(type, url, true);
xhr.setRequestHeader("Content-Type", content);
xhr.onload = function () {
if (xhr.status >= 200 && xhr.status <= 299) {
let dat = '';
try {
dat = JSON.parse(xhr.response);
} catch (e) {
if (dat !== null && dat !== undefined && xhr.responseXML !== null) {
dat = xhr.responseXML;
}
else {
dat = xhr.response;
}
}
console.log(dat);
}
else {
try {
let myError = JSON.parse(xhr.responseText);
console.error('Web Service Error: ', myError);
} catch (e) {
console.error(e);
}
}
};
xhr.onerror = function (e) {
console.error(e);
};
xhr.ontimeout = function (t) {
console.error(t);
};
xhr.send();
}
setInterval(MantenermeActivo, 30000);
< /script >

En realidad puedes utilizar JQUERY y hacer una llamda AJAX, pero he preferido ponerlo con JAVASCRIPT puro por el tema de compatibilidad. Pero si usas JQUERY puedes simplificar un poco esta función JAVASCRIPT

En ASP MVC

Ahora pasamos a hacerlo con MVC. Pero básicamente es el mismo procedimiento que con WebForms sólo cambia un poco la forma.

  1. Os remito a mi post de cómo habiliar las uso de sesiones en WEB API ir a la sección de hacerlo con MVC
  2. Crear una acción en la API para poder llamarla
  3. En la página dónde queremos que no se se caduque la sesión hacer la llamada cada cierto tiempo con JAVASCRIPT a la API
  4. Si nuestro API devuelve algún valor, realizaremos los cambio necesarios.
Ahora sólo os pongo el código de JAVASCRIPT utilizando JQUERY, ya que así podreis elegir entre uno u otro. El procediemiendo es el mismo.
    < script >
function MantenermeActivo() {
$.ajax({
url: "/api/sessiones/MantenermeActivo",
cache: false,
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.error(XMLHttpRequest, textStatus, errorThrown);
}
});
}
setInterval(MantenermeActivo, 30000);
< /script >

Si esta claro que son menos líneas de código utilizando JQUERY, pero es que internamente JQUERY ya tiene todo el código que use antes ;P

Eso es todo amigos

Bueno espero que este truquito os sirva de ayuda. Hasta la próxima.

Happy Coding

#trucos #webforms #MVC #javascript #ASP #web

0 Comentarios

 
 
 

Archivo