¿Hay alguna forma de detectar cuando un usuario inicia sesión si ya hay otra sesión con el mismo nombre de usuario y bloquearlo para que no vuelva a iniciar sesión o enviarle un mensaje?Limitar solo una sesión por usuario en ASP.NET
Respuesta
Siempre puede implementar los eventos en global.asax.
Implemente Application_Start() para configurar un System.Collections.Dictionary (o según su preferencia) y almacénelo en la colección Application [], cuando un usuario inicie sesión, agregue el nombre de usuario. Eliminar de la colección en Session_End(). Recuerde utilizar la palabra clave 'bloquear' mientras trabaja con la colección :)
¡Diviértase!
Ejemplo:
[page.aspx]
public partial class page : System.Web.UI.Page {
protected bool Login(string userName) {
System.Collections.Generic.List<string> d = Application["UsersLoggedIn"]
as System.Collections.Generic.List<string>;
if (d != null) {
lock (d) {
if (d.Contains(userName)) {
// User is already logged in!!!
return false;
}
d.Add(userName);
}
}
Session["UserLoggedIn"] = userName;
return true;
}
protected void Logout() {
Session.Abandon();
}
}
[global.asax]
<%@ Application Language="C#" %>
<script RunAt="server">
void Application_Start(object sender, EventArgs e) {
Application["UsersLoggedIn"] = new System.Collections.Generic.List<string>();
}
void Session_End(object sender, EventArgs e) {
// NOTE: you might want to call this from the .Logout() method - aswell -, to speed things up
string userLoggedIn = Session["UserLoggedIn"] == null ? string.Empty ? (string)Session["UserLoggedIn"];
if (userLoggedIn.Length > 0) {
System.Collections.Generic.List<string> d = Application["UsersLoggedIn"]
as System.Collections.Generic.List<string>;
if (d != null) {
lock (d) {
d.Remove(userLoggedIn);
}
}
}
}
</script>
si está utilizando sesiones para controlar la autorización, es decir ... –
Intenté esta solución, pero no puedo acceder a Application on Session_End porque mi HttpContext.Current es nulo. ¿Cómo puedo acceder? – Inbal
@FredrikJohansson: Si el usuario cierra el navegador sin hacer clic en LogOut, y nuevamente intenta ingresar con el mismo nombre de usuario, el usuario no podrá iniciar sesión. ¿Cómo podemos arreglar eso? – nightfire001
Implementé esto cuando un usuario inicia sesión establece un indicador en el DB en el que está conectado. Era un int que representa la cantidad de veces que ha iniciado sesión. Hemos permitido dos. Entonces solo verificaría eso al validar al usuario.
Y, ¿cómo determinar si un usuario desconectado? También hay conexiones que expiran. Por lo tanto, necesita al menos una rutina que se ejecute en algún lugar para disminuir ese entero – citronas
Sí, eso fue un problema. Creo que teníamos javascript funcionando de forma congruente con el tiempo de espera de la sesión y le preguntaríamos si quería permanecer conectado, si no hubiera respuesta, disminuiría el conteo. También tuve lo mismo en el evento de fin de sesión. También tuvimos un trabajo que restableció la cuenta a 0 en el medio de la noche. – nportelli
Puede almacenar el SessionID de un usuario en una base de datos. En cada inicio de sesión, almacene una combinación de nombre de usuario único e ID de sesión en la base de datos. En la página maestra, incluye la consulta a la base de datos, para verificar si el último inicio de sesión para el nombre de usuario utilizado actualmente fue de la misma sesión. De lo contrario, abandone la sesión y redirija a la página de inicio de sesión.
El comportamiento que publiqué debería desconectar al segundo usuario. Puede cambiar la sesión. Abandonar su comportamiento deseado
Puede hacer un seguimiento de los usuarios que han iniciado sesión en su archivo global.asax utilizando el objeto Aplicación.
En el método Session_Start o su método de inicio de sesión, puede verificar si el usuario está almacenado en el objeto Aplicación.
En el método Session_End o en su método de cierre de sesión, deberá eliminar el usuario del objeto Aplicación.
Intenté esta solución, pero no puedo acceder a Application on Session_End porque mi HttpContext.Current es nulo. ¿Cómo puedo acceder? – Inbal
No lo almacene en la base de datos si no puede identificar el evento de cierre de sesión del usuario (pueden hacer clic en cerrar sesión, cerrar la pestaña, cerrar todo el navegador o simplemente apagar la computadora ...). Use la sesión para hacer la misma comprobación en su lugar.
- 1. Permitir solo una sola sesión activa por usuario en la aplicación Django
- 2. Raíles Inicio de sesión solo por contraseña
- 3. Cerrar sesión programáticamente un usuario de ASP.NET
- 4. Borrando una sesión en ASP.NET
- 5. PHP/SESSION: ¿Iniciar sesión uno por usuario?
- 6. Especificación de sesión de solo lectura en ASP.NET MVC
- 7. Autenticación de usuario sin estado de sesión en ASP.NET
- 8. Roles de usuario: ¿por qué no almacenar en sesión?
- 9. Mejores prácticas de inicio de sesión de usuario de ASP.NET
- 10. permitiendo solo el inicio de sesión de súper usuario
- 11. Cómo matar una sesión o ID de sesión (ASP.NET/C#)
- 12. sesión de ASP.NET en Global.asax
- 13. Escribiendo en una sesión de solo lectura en MVC 3+
- 14. ¿Cómo eliminar una sesión específica en asp.net?
- 15. Donde debería declarar una variable de sesión en asp.net
- 16. ¿Cómo limitar el acceso a la página solo a localhost?
- 17. Limitar restricción por nombre en Postgresql
- 18. ¿Cómo puedo compartir una sesión en múltiples subdominios en ASP.NET?
- 19. Cómo limitar los campos en django-admin según el usuario?
- 20. Cómo asegurarme de que un usuario solo puede votar una vez en una encuesta de ASP.NET
- 21. En ASP.Net, ¿puedo averiguar si existe otra sesión o si es válida por una Id de sesión?
- 22. Personalización del tiempo de espera de la sesión por usuario: ASP.NET
- 23. ¿Por qué https solo se usa para iniciar sesión?
- 24. Django admin - ¿Es posible limitar el acceso de un usuario a solo sus propios datos ingresados?
- 25. ¿Cómo me aseguro de que un usuario solo inicie sesión una vez?
- 26. Evitar el secuestro de sesión en ASP.NET
- 27. variables de sesión de asp.net en Session_End
- 28. suplantar a un usuario suscrito en ASP.NET
- 29. inicio de sesión único en asp.net
- 30. Asp.Net MVC y sesión
Tener un vistazo a este artículo: http://www.sharepoint4developers.net/en-nz/post/limit-session-account.aspx –