En una intranet desarrollada para una empresa donde trabajo se requeria que cuando el usuario cerrara su ventana actual de navegador, sin cerrar previamentre su sesion de usuario autenticado, el sistema deberia solicitarle los datos para la autenticacion, por razones de seguridad algunos gerentes cierran sus ventanas con sus credenciales pero algunas personas pueden sentarse en su maquina y seguir con las credenciales en el cache.
En este caso particular las sessiones las guardamos en un Servidor de Session.
La solucion mas rapida que encontre a este problema fue crear una clase que here de System.Web.UI.MasterPage con este codigo y luego que las demas MasterPages principales utilizadas en el sitio hereden (en este caso una sola)
Public Class YODAMasterBase Inherits System.Web.UI.MasterPage Protected Overrides Sub OnInit(ByVal e As System.EventArgs) MyBase.OnInit(e) If (Context.Session IsNot Nothing) Then If (Session.IsNewSession) Then Dim cadenaCookieHeader As String = Request.Headers("Cookie") If (cadenaCookieHeader IsNot Nothing) Or (cadenaCookieHeader.IndexOf("ASP.NET_SessionId") >= 0) Then FormsAuthentication.SignOut() Response.Redirect("~/login.aspx?accion=demo") End If End If End If End Sub End Class
Luego hay que heredar de estar MasterPage llamada YodaMasterPage las que necesitemos esta funcionalidad.
Partial Class EJEMPLODeMasterPage Inherits YodaMasterPage
Tambien podriamos preguntar si es .IsNewSession y el usuario esta autenticado .IsAuthenticated, que luego lo testeare y probare.
Enlaces
- Modos de Estado de Session
http://msdn2.microsoft.com/es-es/library/ms178586(VS.80).aspx - HttpSessionState.IsNewSession (Propiedad)
Obtiene un valor que indica si la sesión se creó con la solicitud actual. - HttpRequest.IsAuthenticated (Propiedad)
Obtiene un valor que indica si la solicitud se ha autenticado