Article View: chile.comp.programacion
Article #1917Re: Session Unica...
From: Pintamono
Date: Tue, 09 May 2006 13:48
Date: Tue, 09 May 2006 13:48
76 lines
3696 bytes
3696 bytes
Se genera un SortedList en el cual se graba el ID del usuario y la hora
en que ingreso, este sortedlist se guarda en Application para queeste
disponible para todos los usuarios, luego cuando alguien quiere ingrsar
al sistema se recupera el sortedlist y se busca a el usuario que
intenta ingresar, si existe se le indica que no puede ingresar y si no
existe se agrega al sortedlist y se vuelve a dejar en Application.
El codigo es como se muestra a continuacion.
En el Global.asax coloque esto:
protected void Application_Start(Object sender, EventArgs e)
{
SortedList lista = new SortedList();
Application.Lock();
Application["USUARIOS"]= lista;
Application.UnLock();
lista = null;
}
Voy a aprovechar
protected void Application_PreRequestHandlerExecute(Object sender,
EventArgs e)
{ }
para calcular el tiempo que lleva activa la session.
Luego en la pagina de login hago lo siguiente:
if (Sesion.Autentificar(Username,Password,TipoAutenticacion.Form))
{
FormsAuthentication.RedirectFromLoginPage(Sesion.ID.ToString(),false);
Session["IDUsuario"]=Sesion.ID;
SortedList m = (SortedList)Application["USUARIOS"];
if (!m.ContainsKey(Convert.ToInt64(Session["IDUsuario"])))
{
m.Add(Sesion.ID,DateTime.Now.Ticks.ToString());
Application.Lock();
Application["USUARIOS"] = m;
Application.UnLock();
}
else
{
Session["Error"]= "Lo Siento, este usuario ya se encuentra
autenticado";
FormsAuthentication.SignOut();
}
}
else
{
lblError.Text="";
WriteScriptLoad("alert('Login o Password incorrectos')");
}
Esto me permite que no puedan ingresar al sistema dos personas con las
misma cuenta de usuario.
funciona re bien excepto cuando se termina la session o se pincha el
boton X ya que para terminar tengo el siguiente codigo en el boton
salir de la botonera:
SortedList m = (SortedList) Application["USUARIOS"];
if (m.ContainsKey(Convert.ToInt64(Session["IDUsuario"])))
{
m.Remove(Convert.ToInt64(Session["IDUsuario"]));
Application.Lock();
Application["USUARIOS"]=m;
Application.UnLock();
}
m=null;
Y si pasan esos dos eventos mecionados anteriormente no elimina del
sortedlist el usuario y cuando quiere volver a ingresar le dice que ya
se encuentra conectado.
Esa es la solucion que casi me funciona hasta ahora...
Technical Details
Message-ID:
<1147182526.797882.275760@j73g2000cwa.googlegroups.com>Path:
arc1-ca.pugleaf.net!g2news2.google.com!postnews.google.com!j73g2000cwa.googlegroups.com!not-for-mailReferences:
<1146843706.066639.266030@y43g2000cwc.googlegroups.com>Show Full Headers
Complete Article Headers
X-Google-Thread: 1593cb,1791e85539ae80f6 X-Google-Attributes: gid1593cb,public X-Google-Language: SPANISH,ASCII-7-bit Path: arc1-ca.pugleaf.net!g2news2.google.com!postnews.google.com!j73g2000cwa.googlegroups.com!not-for-mail From: "Pintamono" <pintamono79@yahoo.es> Newsgroups: chile.comp.programacion Subject: Re: Session Unica... Date: 9 May 2006 06:48:46 -0700 Organization: http://groups.google.com Lines: 77 Message-ID: <1147182526.797882.275760@j73g2000cwa.googlegroups.com> References: <1146843706.066639.266030@y43g2000cwc.googlegroups.com> NNTP-Posting-Host: 200.27.140.110 Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-Trace: posting.google.com 1147182534 4619 127.0.0.1 (9 May 2006 13:48:54 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Tue, 9 May 2006 13:48:54 +0000 (UTC) In-Reply-To: <1146843706.066639.266030@y43g2000cwc.googlegroups.com> User-Agent: G2/0.2 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.2; es-AR; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3,gzip(gfe),gzip(gfe) X-HTTP-Via: 1.1 SRV-FIREWALL Complaints-To: groups-abuse@google.com Injection-Info: j73g2000cwa.googlegroups.com; posting-host=200.27.140.110; posting-account=skJ50Q0AAACOrmQ9kj5c1tjv36P849np