Soy nuevo en ASP.NET MVC. He usado PHP antes y fue fácil crear una sesión y seleccionar registros de usuario en función de las variables de la sesión actual.
He buscado en todas partes de Internet un sencillo tutorial paso a paso que pueda mostrarme cómo crear y usar sesiones en mi aplicación C # ASP.NET MVC 4. Quiero crear una sesión con variables de usuario a las que pueda acceder desde cualquier lugar de mis controladores y poder usar las variables en mis consultas LINQ.
asp.net-mvc
session
asp.net-mvc-4
session-variables
Thuto Paul Gaotingwe
fuente
fuente
Respuestas:
Tratar
fuente
WebSecurity.CurrentUserId
para que no lo extraiga de la base de datos varias veces (descubrí que es muy costoso)?Account/LogOn
aHome/Index
,Session["FirstName"]
esnull
. Los desarrolladores deben crear un controlador principal (BaseController
) y definir un campo protegido (internal protected HttpSessionStateBase SharedSession
) que puede exponer la variable de sesión compartida en todos los subcontroladores (esto supone que todos los controladores de su aplicación heredan delBaseController
)Debido a la naturaleza sin estado de la web, las sesiones también son una forma extremadamente útil de persistir objetos en las solicitudes serializándolos y almacenándolos en una sesión.
Un caso de uso perfecto de esto podría ser si necesita acceder a información regular a través de su aplicación, para guardar llamadas de base de datos adicionales en cada solicitud, estos datos se pueden almacenar en un objeto y no serializar en cada solicitud, así:
Nuestro objeto serializable y reutilizable:
Caso de uso:
Una vez que este objeto ha sido serializado, podemos usarlo en todos los controladores sin necesidad de crearlo o consultar la base de datos para obtener los datos que contiene nuevamente.
Inyecte su objeto de sesión usando Dependency Injection
En un mundo ideal, ' programaría en una interfaz, no en una implementación ' e inyectaría su objeto de sesión serializable en su controlador usando su contenedor de Inversión de Control de su elección, así (este ejemplo usa StructureMap ya que es con el que estoy más familiarizado ).
Luego registraría esto en su
Global.asax.cs
archivo.Para aquellos que no están familiarizados con la inyección de objetos de sesión, pueden encontrar una publicación de blog más detallada sobre el tema aquí .
Una palabra de advertencia:
Vale la pena señalar que las sesiones deben mantenerse al mínimo, las sesiones grandes pueden comenzar a causar problemas de rendimiento.
También se recomienda no almacenar ningún dato sensible en ellos (contraseñas, etc.).
fuente
Así es como funciona el estado de la sesión en ASP.NET y ASP.NET MVC:
Descripción general del estado de sesión de ASP.NET
Básicamente, haces esto para almacenar un valor en el objeto Session:
Para recuperar el valor:
fuente
Account
aHome
, la sesión ["Nombre"] es nula. Los desarrolladores deben crearBaseController
y definir un campo protegido (internal protected HttpSessionStateBase SharedSession
) que pueda exponer laSession
variable compartida en todos los subcontroladores (esto supone que todos los controladores de su aplicación heredan delBaseController
)Puede almacenar cualquier tipo de datos en una sesión usando:
Esta variable tendrá una duración de 20 minutos aproximadamente.
fuente
U puede almacenar cualquier valor en la sesión como Session ["FirstName"] = FirstNameTextBox.Text; pero te sugeriré que lo tomes como campo estático en el modelo y que puedas acceder a ese valor de campo en cualquier lugar de la aplicación. No necesitas sesión. debe evitarse la sesión.
en el controlador - Employee.FullName = "ABC"; Ahora puede acceder a este nombre completo en cualquier lugar de la aplicación.
fuente