Eu sou novo no ASP.NET MVC. Eu já usei PHP antes e foi fácil criar uma sessão e selecionar registros de usuários com base nas variáveis da sessão atual.
Procurei em toda parte na Internet por um simples tutorial passo a passo que pode me mostrar como criar e usar sessões na minha aplicação C# ASP.NET MVC 4. Eu quero criar uma sessão com variáveis de usuário que eu possa acessar de qualquer lugar nos meus controladores e ser capaz de usar as variáveis nas minhas consultas LINQ.
-Graças adiantadas!
Experimente
//adding data to session
//assuming the method below will return list of Products
var products=Db.GetProducts();
//Store the products to a session
Session["products"]=products;
//To get what you have stored to a session
var products=Session["products"] as List<Product>;
//to clear the session value
Session["products"]=null;
Devido à natureza stateless da web, as sessões são também uma forma extremamente útil de persistir objetos através de pedidos, seriando-os e armazenando-os em uma sessão.
Um caso de uso perfeito disso pode ser se você precisar acessar informações regulares em toda a sua aplicação, para salvar chamadas de banco de dados adicionais em cada pedido, esses dados podem ser armazenados em um objeto e não serializados em cada pedido, assim:
O nosso objecto reutilizável e reutilizável em série:
[Serializable]
public class UserProfileSessionData
{
public int UserId { get; set; }
public string EmailAddress { get; set; }
public string FullName { get; set; }
}
Uso caso:
public class LoginController : Controller {
[HttpPost]
public ActionResult Login(LoginModel model)
{
if (ModelState.IsValid)
{
var profileData = new UserProfileSessionData {
UserId = model.UserId,
EmailAddress = model.EmailAddress,
FullName = model.FullName
}
this.Session["UserProfile"] = profileData;
}
}
public ActionResult LoggedInStatusMessage()
{
var profileData = this.Session["UserProfile"] as UserProfileSessionData;
/* From here you could output profileData.FullName to a view and
save yourself unnecessary database calls */
}
}
Uma vez que este objeto tenha sido serializado, podemos usá-lo em todos os controladores sem precisar criá-lo ou consultar a base de dados para os dados contidos nele novamente.
**Injete seu objeto de sessão usando Injeção de Dependência***
Em um mundo ideal você 'programaria para uma interface, não implementação' e injetaria seu objeto de sessão serializável em seu controlador usando seu recipiente de Inversão de Controle de escolha, assim (este exemplo usa StructureMap como ele'é o que I'estou mais familiarizado com).
public class WebsiteRegistry : Registry
{
public WebsiteRegistry()
{
this.For<IUserProfileSessionData>().HybridHttpOrThreadLocalScoped().Use(() => GetUserProfileFromSession());
}
public static IUserProfileSessionData GetUserProfileFromSession()
{
var session = HttpContext.Current.Session;
if (session["UserProfile"] != null)
{
return session["UserProfile"] as IUserProfileSessionData;
}
/* Create new empty session object */
session["UserProfile"] = new UserProfileSessionData();
return session["UserProfile"] as IUserProfileSessionData;
}
}
Você então registraria isto no seu arquivo `Global.asax.cs'.
Para aqueles que estão'não familiarizados com objetos da sessão de injeção, você pode encontrar um post de blog mais aprofundado sobre o assunto aqui.
Uma palavra de aviso:
É importante notar que as sessões devem ser mantidas a um mínimo, as grandes sessões podem começar a causar problemas de desempenho.
It's também é recomendado não armazenar neles quaisquer dados sensíveis (senhas, etc).
É assim que o estado da sessão funciona em ASP.NET e ASP.NET MVC:
Visão Geral do Estado da Sessão ASP.NET
Basicamente, isto é feito para armazenar um valor no objeto Sessão:
Session["FirstName"] = FirstNameTextBox.Text;
Para recuperar o valor:
var firstName = Session["FirstName"];