Как использовать сеансы в приложении ASP.NET MVC 4?
Я новичок в ASP.NET MVC. Раньше я использовал PHP, и было легко создать сеанс и выбрать записи пользователя на основе текущих переменных сеанса.
Я просмотрел всюду в Интернете для простого пошагового руководства, которое может показать мне, как создавать и использовать сеансы в моем приложении С# ASP.NET MVC 4. Я хочу создать сеанс с пользовательскими переменными, к которым я могу получить доступ из любого места в своих контроллерах, и иметь возможность использовать переменные в моих запросах LINQ.
- Спасибо заранее!
Ответы
Ответ 1
Try
//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;
Ответ 2
Из-за безгражданности веб-сайта сеансы также являются чрезвычайно полезным способом сохранения объектов через запросы путем их сериализации и хранения в сеансе.
Идеальный вариант использования этого может быть, если вам нужно получить доступ к регулярной информации в вашем приложении, чтобы сохранить дополнительные запросы к базе данных по каждому запросу, эти данные могут быть сохранены в объекте и неэтериализованы для каждого запроса, например:
Наш многоразовый, сериализуемый объект:
[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 */
}
}
Как только этот объект был сериализован, мы можем использовать его во всех контроллерах без необходимости его создания или снова запрашивать базу данных для содержащихся в ней данных.
Внедрить свой объект сеанса с помощью инъекции зависимостей
В идеальном мире вы бы программировали интерфейс, а не реализацию, и вставляете свой сериализуемый объект сеанса в свой контроллер, используя ваш контейнер Inversion of Control по выбору, (этот пример использует 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;
}
}
Затем вы зарегистрировали бы это в своем файле Global.asax.cs
.
Для тех, кто не знаком с инъекционными объектами сеанса, вы можете найти более подробное сообщение в блоге о теме здесь.
Слово предупреждения:
Стоит отметить, что сеансы должны быть сведены к минимуму, большие сеансы могут вызвать проблемы с производительностью.
Также рекомендуется не хранить в них конфиденциальные данные (пароли и т.д.).
Ответ 3
Вот как работает состояние сеанса в ASP.NET и ASP.NET MVC:
Обзор состояния сеанса ASP.NET
В основном, вы делаете это, чтобы сохранить значение в объекте Session:
Session["FirstName"] = FirstNameTextBox.Text;
Чтобы получить значение:
var firstName = Session["FirstName"];
Ответ 4
U может хранить любое значение в сеансе, например
Session [ "FirstName" ] = FirstNameTextBox.Text;
но я предлагаю u взять в качестве статического поля значение присвоения модели, и вы можете получить доступ к этому значению поля где угодно в приложении. U не требуется сеанс. сеанса следует избегать.
public class Employee
{
public int UserId { get; set; }
public string EmailAddress { get; set; }
public static string FullName { get; set; }
}
на контроллере - Employee.FullName = "ABC";
Теперь вы можете получить доступ к этому полному имени в любом месте приложения.