Obviamente, el enfoque típico de WebForms no funcionará. ¿Cómo se rastrea un usuario en un mundo MVC?¿Cuál es el patrón aceptado para implementar Session en sitios ASP.NET MVC?
Respuesta
La sesión funciona exactamente de la misma manera que funcionó en Webforms. Si desea almacenar información simple, use la cookie de autenticación de formularios. Si desea almacenar un contenido de carrito de compras, Session es el lugar indicado. Me escribió una entrada de blog sobre using Session with ASP.NET:
supongamos que queremos almacenar una variable entera en Session.We creará envoltura alrededor de la variable de sesión que hace que parezca más bonita:
Primero definimos interfaz:
public interface ISessionWrapper
{
int SomeInteger { get; set; }
}
entonces hacemos HttpContext aplicación:
public class HttpContextSessionWrapper : ISessionWrapper
{
private T GetFromSession<T>(string key)
{
return (T) HttpContext.Current.Session[key];
}
private void SetInSession(string key, object value)
{
HttpContext.Current.Session[key] = value;
}
public int SomeInteger
{
get { return GetFromSession<int>("SomeInteger"); }
set { SetInSession("SomeInteger", value); }
}
}
GetFromSession y SetInSession son método de ayuda que hacen tomar y s Obtener datos en Session es más fácil. Algunas propiedades integrales usan estos métodos.
Entonces definimos nuestro controlador de base (aplicable a ASP.NET MVC):
public class BaseController : Controller
{
public ISessionWrapper SessionWrapper { get; set; }
public BaseController()
{
SessionWrapper = new HttpContextSessionWrapper();
}
}
Si desea utilizar el controlador fuera de sesión, que acaba de crear o inyectar nueva HttpContextSessionWrapper().
Puede reemplazar SessionWrapper con el simulacro de ISessionWrapper en las pruebas del Controlador, por lo que ya no depende de HttpContext. La sesión también es más fácil de usar, porque en lugar de llamar a (int) Session ["SomeInteger"], llama a SessionWrapper.SomeInteger. Se ve mejor, ¿no?
Puede tener la tentación de crear una clase estática que cubra el objeto Session y no necesite definir ninguna interfaz o inicialización en BaseController, pero pierde algunas de sus ventajas, especialmente cuando se trata de probar y reemplazar con otra implementación .
¿Por qué escribiría una interfaz y una clase contenedora cuando el marco ya le proporciona 'HttpContext.Current.Session [key]'? –
Porque: 1. var cart = (List
buenos puntos. Aunque no puedo recuperar el voto a menos que edites la publicación. –
Aquí es un código que utilizo, sólo un poco versión "mejorada" de la versión anterior:
private T GetFromSessionStruct<T>(string key, T defaultValue = default(T)) where T : struct
{
object obj = HttpContext.Current.Session[key];
if (obj == null)
{
return defaultValue;
}
return (T)obj;
}
private T GetFromSession<T>(string key) where T : class
{
object obj = HttpContext.Current.Session[key];
return (T)obj;
}
private T GetFromSessionOrDefault<T>(string key, T defaultValue = null) where T : class
{
object obj = HttpContext.Current.Session[key];
if (obj == null)
{
return defaultValue ?? default(T);
}
return (T)obj;
}
private void SetInSession<T>(string key, T value)
{
if (value == null)
{
HttpContext.Current.Session.Remove(key);
}
else
{
HttpContext.Current.Session[key] = value;
}
}
cómo implementaría, ¿puede mostrarnos algunos ejemplos del código anterior? –
- 1. End Session en ASP.net MVC
- 2. ASP.NET MVC Session Estado
- 3. ¿Cuál es el patrón aceptado para WPF al mando en MVVM?
- 4. Cómo implementar el patrón MVC en Tkinter
- 5. ¿Cuál es el estándar aceptado para dictar expresiones lambda?
- 6. Mejor patrón de repositorio para ASP.NET MVC
- 7. ASP.NET MVC Session vs Global vs Cache
- 8. ASP.Net Session
- 9. ¿Cuál es el punto de ASP.net AJAX en ASP.net MVC?
- 10. ¿Cuál es la diferencia entre Session y ViewData en Asp.net-MVC?
- 11. ¿Cuál es el patrón correcto para implementar el encuadre TCP? ¿Es una pila de filtros?
- 12. ¿Cuál es el formato aceptado por el analizador System.Net.Mail.MailAddress?
- 13. ¿Qué archivos necesito implementar para ASP.NET mvc?
- 14. ¿Cuál es la mejor manera de implementar controles de usuario en ASP.NET MVC?
- 15. ASP.NET MVC 3 Viewmodel Patrón
- 16. Sitios web multilingües con ASP.NET MVC
- 17. ¿Cuál es el mejor mecanismo para implementar seguridad granular (es decir, autorización) en una aplicación ASP.NET MVC?
- 18. Cuándo usar TempData vs Session en ASP.Net MVC
- 19. ¿Es posible implementar X-HTTP-Method-Override en ASP.NET MVC?
- 20. ASP.NET MVC Project Structure para sitios más grandes
- 21. ¿Cuál es el reemplazo de Controller.ReadFromRequest en ASP.NET MVC?
- 22. Cómo implementar funciones de búsqueda en aplicaciones ASP.NET MVC
- 23. ¿Cuál es el patrón apropiado en Python para implementar getters perezosos?
- 24. Asp.Net Session es nulo en el archivo ashx
- 25. ¿Cuál es la mejor manera de implementar una API en ASP.NET usando MVC?
- 26. cuál es la mejor manera de implementar FTP en un sitio asp.net mvc
- 27. Cómo implementar el patrón MVC sin mantener Vistas activas
- 28. ¿Cuál es la mejor/más limpia forma de implementar las pruebas A-B en asp.net mvc?
- 29. ¿Por qué es una mala idea usar Session para almacenar estados en sitios web de alto tráfico?
- 30. ¿Cuál es el mejor lugar para la lógica empresarial en ASP.NET MVC cuando se usan repositorios?
estoy interesado en esto por mí mismo. Personalmente, quiero mantener un rastro de navegación, pero no quiero pasar esto en la cadena de consulta. ¿Qué específicamente desea realizar un seguimiento del usuario? –
¿Cuál es el "enfoque típico de WebForms" que no funcionará? –