Переменные сеанса теряют значение после перенаправления на новую страницу

MVS 2012 SQL Server 2008 R2

У меня есть объект, который хранится в сеансе с помощью обертки сеанса. Во время входа я инициализирую объект и устанавливаю сессию соответствующим образом. После аутентификации пользователя я перенаправляю пользователя на страницу индекса пользователя. Пользователь перенаправлен на страницу индекса, но переменная сеанса не равна нулю. Я не уверен, почему это происходит. Вот пример кода того, что я делаю.

Вот моя настройка веб-конфигурации. Если я закомментирую этот раздел веб-конфигурации и снова запустите приложение, оно будет работать нормально.

<sessionState mode="SQLServer" allowCustomSqlDatabase="true" timeout="60" cookieless="false" sqlConnectionString="Data Source=(****);Initial Catalog=data1;User ID=****;Password=****;Integrated Security=True" />

Это объект, который обернут в сессию

 public class CurrentRequest
 {
   public int UserId { get; set; }
   public string Role { get; set; }
 }

вот сессионная оболочка

 public static CurrentRequest currentRequest
 {
   get
   {
     if (HttpContext.Current.Session["request"] != null)
     {
       return (CurrentRequest)HttpContext.Current.Session["request"];
     }
     else
     {
       return null;
     }
   }
   set
   {
     HttpContext.Current.Session["request"] = value;
   }
 }

Здесь я проверяю роль и перенаправляю пользователя на соответствующую страницу

CurrentRequest currentRequest = new CurrentRequest();
SessionWrapper.currentRequest = currentRequest;
int userId = login.GetUserId(model.UserName, true);
SessionWrapper.currentRequest.UserName = model.UserName;
string[] roles = Roles.GetRolesForUser(model.UserName);
if (roles.Count() > 0)
{
  string aRole = roles[0];
  switch (aRole)
  {
    case "Admin":
      SessionWrapper.currentRequest.Role = aRole;
      SessionWrapper.currentRequest.UserId = userId; 
.
.

переменные сессий выше установлены правильно, и я перенаправляю пользователя на страницу индекса пользователей

return RedirectToAction("Index", "Users");
                    case "User":

На контроллере пользователей я проверяю, является ли этот пользователь администратором или нет, но переменная сеанса SessionWrapper.currentRequest имеет значение null

if (SessionWrapper.currentRequest.Role == "Admin")
{
  users = db.UserRepository.GetAll();
}

Что я здесь не так делаю?

1 ответ

Решение

Я нашел проблему. У меня не было методов Session_Start и Session_End в моем файле global.asax. Я добавил эти два метода подписи, и это больше не было проблемой.

protected void Session_Start(object sender, EventArgs e)
{

}
protected void Session_End(object sender, EventArgs e)
{

}