c# - Cómo generar una nueva ID de sesión
asp.net session (5)
¿Supongo que esto está relacionado con la seguridad? ¿ Session.Clear()
para usted Session.Clear()
o Session.Abandon()
? Este es un buen enlace SO relacionado con esos métodos.
De lo contrario, es difícil porque la cookie de sesión de ASP.NET ya está en el navegador del usuario. Es posible que no tenga confianza de que la sesión realmente haya cambiado.
¿Es posible generar una nueva identificación para la sesión usando ASP.NET?
Quiero que cambie cuando alguien inicie sesión en mi sitio web justo antes de configurar las variables de sesión iniciales.
La infraestructura de gestión de sesiones de ASP.Net no expone una forma admitida de cambiar su ID de sesión durante el manejo de una solicitud. Si la escritura del código compatible es importante para usted, hay varias cosas que debe tener en cuenta con la respuesta aceptada.
- Tanto
CreateSessionID
comoSaveSessionID
están marked "Este método no debe llamarse desde el código de la aplicación". - El proveedor de SessionID es un tipo conectable (consulte, por ejemplo, la Implementación de un SessionIDManager personalizado ), por lo que al menos necesitaría crear una instancia del tipo correcto.
- El estado de la sesión adjunto al
HttpContext
seguirá asociado con la identificación de la sesión inicial, por lo que todo lo que coloque en la bolsa de estado de la sesión parecerá perdido. Como no hay nada que puedas hacer con la sesión una vez que hayas cambiado tu id, es inútil cambiar tu id de esta manera.
Lamentablemente, no hay una forma compatible de hacer esto sin un viaje de ida y vuelta. Lo que debe hacer es borrar la cookie de estado de la sesión cuando genera el formulario de inicio de sesión. Cuando el usuario reenvía el formulario, el marco llamará al SessionIDManager
para generar uno nuevo. Limpiar la cookie de sesión correctamente es un poco más complicado de lo que muestran la mayoría de los ejemplos de código. El nombre de la cookie es otro parámetro configurable en web.config. Debe leerlo desde la configuración accediendo a la propiedad:
((System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState")).CookieName
La cookie de identificación de la sesión no tiene un alcance para la aplicación, por lo que si hay dos aplicaciones instaladas en el mismo servidor, a menudo es deseable que utilicen diferentes nombres de cookies, por lo que esto se requiere con más frecuencia de lo que podría pensar.
Puedes hacer esto usando la clase SessionIdManager :
SessionIDManager manager = new SessionIDManager();
string newID = manager.CreateSessionID(Context);
bool redirected = false;
bool isAdded = false;
manager.SaveSessionID(Context, newID, out redirected, out isAdded);
[Ejemplo de código es del artículo de Anas Ghanem]
puedes usar
SessionIDManager.CreateSessionID Method :
devuelve un identificador de sesión único que es un número generado aleatoriamente codificado en una cadena de 24 caracteres.
Código
SessionIDManager Manager = new SessionIDManager();
string NewID = Manager.CreateSessionID(Context);
string OldID = Context.Session.SessionID;
bool redirected = false;
bool IsAdded = false;
Manager.SaveSessionID(Context, NewID,out redirected, out IsAdded);
Aquí puede encontrar todos los detalles sobre hsi: cambiar la ID de sesión mediante programación.
sí, es posible generar una nueva ID para la sesión. a continuación hay un ejemplo
SessionState.SessionIDManager Manager = new SessionState.SessionIDManager();
string NewID = Manager.CreateSessionID(Context);
string OldID = Context.Session.SessionID;
bool IsAdded = false;
Manager.SaveSessionID(Context, NewID, false, IsAdded);
Response.Write("Old SessionId Is : " + OldID);
if (IsAdded) {
Response.Write("<br/> New Session ID Is : " + NewID);
}
else {
Response.Write("<br/> Session Id did not saved : ");
}