Как использовать сеансы в ASP.NET приложение MVC 4?
Я новичок ASP.NET MVC. Я использовал PHP раньше, и было легко создать сеанс и выбрать записи пользователей на основе текущих переменных сеанса.
Я искал везде в Интернете для простого пошагового руководства, которое может показать мне, как создавать и использовать сеансы в моем C# ASP.NET приложение MVC 4. Я хочу создать сеанс с пользовательскими переменными, к которым я могу получить доступ из любой точки моих контроллеров и иметь возможность использовать переменные в моем LINQ запросы.
-спасибо заранее!
4 ответов:
попробовать
//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;
из-за отсутствия состояния в интернете сеансы также являются чрезвычайно полезным способом сохранения объектов в запросах путем их сериализации и хранения в сеансе.
идеальный вариант использования этого может быть, если вам нужно получить доступ к регулярной информации в вашем приложении, чтобы сохранить дополнительные вызовы базы данных по каждому запросу, эти данные могут быть сохранены в объекте и несериализованы по каждому запросу, например:
наши многоразовые, сериализуем объект:
[Serializable] public class UserProfileSessionData { public int UserId { get; set; } public string EmailAddress { get; set; } public string FullName { get; set; } }использовать случае:
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 */ } }после того, как этот объект был сериализован, мы можем использовать его во всех контроллерах без необходимости создавать его или запрашивать базу данных для данных, содержащихся в нем снова.
введите объект сеанса с помощью инъекции зависимостей
в идеальном мире вы могли бы 'программа для интерфейса, а не реализации ' и введите Ваш сериализуемый сеанс объект в ваш контроллер, используя инверсию контейнера Управления по выбору, например (в этом примере используется StructureMap, поскольку это тот, с которым я больше всего знаком).
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; } }затем вы зарегистрируете это в своем .
для тех, кто не знаком с инъекционными объектами сеанса, вы можете найти более подробное сообщение в блоге о предмете здесь.
предупреждения:
стоит отметить, что сеансы должны быть сведены к минимуму, большие сеансы могут начать вызывать проблемы с производительностью.
также рекомендуется не хранить в них конфиденциальные данные (пароли и т. д.).
вот как работает состояние сеанса ASP.NET и ASP.NET MVC:
ASP.NET обзор состояния сеанса
в принципе, вы делаете это, чтобы сохранить значение в сессии объекта:
Session["FirstName"] = FirstNameTextBox.Text;чтобы получить значение:
var firstName = Session["FirstName"];
U может хранить любое значение в сеансе, например Session ["FirstName"] = FirstNameTextBox.Текст; но я предложу вам взять в качестве статического поля в модели присвоить ему значение, и вы можете получить доступ к этому значению поля в любом месте приложения. Вам не нужна сессия. сессии следует избегать.
public class Employee { public int UserId { get; set; } public string EmailAddress { get; set; } public static string FullName { get; set; } }на контроллере-сотрудник.Полное имя = "Азбука"; Теперь вы можете получить доступ к этому полному имени в любом месте приложения.
Comments