Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //clase Validasesion.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- [Serializable]
- public class ValidaSesion
- {
- public void registrarSesion(HttpContext contexto, string nombreusuario)
- {
- TimeSpan TimeOut = new TimeSpan(0, 0, contexto.Session.Timeout, 0, 0);
- nombreusuario = nombreusuario.Trim();
- if (contexto.Cache(nombreusuario) == null)
- contexto.Cache.Insert(nombreusuario, contexto.Session.SessionID, null /* TODO Change to default(_) if this is not a reference type */, DateTime.Now.AddMinutes(contexto.Session.Timeout), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.NotRemovable, null /* TODO Change to default(_) if this is not a reference type */);
- contexto.Session("nombreusuario") = nombreusuario;
- }
- public bool HayConcurrencia(HttpContext contexto)
- {
- bool result = false;
- if (contexto.Session != null)
- if (contexto.Session("nombreusuario") != null)
- {
- string cacheKey = contexto.Session("nombreusuario").ToString();
- result = (System.Convert.ToString(contexto.Cache(cacheKey)) != contexto.Session.SessionID);
- if (!result)
- string user = System.Convert.ToString(contexto.Cache(cacheKey));
- }
- return result;
- }
- public void EliminarRegistro(HttpContext contexto)
- {
- if (contexto.Session("nombreusuario") != null)
- contexto.Cache.Remove(contexto.Session("nombreusuario").ToString());
- }
- }
- //llamado a la clase para agregar a variable context cache en Servidor IIS y validar si ya existe en el sistema.
- ValidaSesion Sesiones = new ValidaSesion();
- ValidaSesion clase = new ValidaSesion();
- Sesiones.registrarSesion(HttpContext.Current, TxtUsr.Text);
- if (clase.HayConcurrencia(HttpContext.Current))
- {
- FormsAuthentication.SignOut();
- Session.Clear();
- Response.Redirect("/Administracion/Mantencion/UsuarioEnSistema.aspx", true);
- }
- //script para limpiar la sesion cuando se cierra la pestaña o navegador (revisar porque no funciona)
- function PageMethod(methodName, onSuccess, onFail) {
- var args = '';
- var l = arguments.length;
- if (l > 3) {
- for (var i = 3; i < l - 1; i += 2) {
- if (args.length != 0) args += ',';
- args += '"' + arguments[i] + '":"' + arguments[i + 1] + '"';
- }
- } //if.
- var loc = window.location.href;
- loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "default.aspx" : loc;
- $.ajax({
- type: "POST",
- url: loc + "/" + methodName,
- data: "{" + args + "}",
- contentType: "application/json; charset=utf-8",
- dataType: "json",
- success: onSuccess,
- fail: onFail
- });
- } //End function.
- function SalirAplicacion() {
- if (event.clientY < 0) {
- PageMethod("LiberarSesion", function (response) { var a = 2; }, function (response) {
- alert("Existe un error de conexión, la sesión no se descargo correctamente. Contacte a soporte técnico.");
- });
- } //fin de if.
- } //function.
- window.onbeforeunload = SalirAplicacion;
- //Web metod para llamar al javascript anterior
- [WebMethod()]
- public static void LiberarSesion()
- {
- ValidaSesion clase = new ValidaSesion();
- clase.EliminarRegistro(HttpContext.Current);
- }
- //Para liberar la sesion se debe llamar al metodo dentro del webmetod LiberarSesion()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement