如何在 asp.net mvc4 中将多个会话值设置为 null?

How to set multiple session value to null in asp.net mvc4?

我有一个管理员和用户会话。

 Session["uname"]  
 Session["Admin"]

我的查询是在会话结束时仅管理员重定向到登录页面。但是当用户会话结束时,它不会重定向到登录页面。

请给我建议如何为管理员和用户设置会话。

这是我的代码

用户是我的控制器

登录操作

[HttpPost]
public ActionResult Login(Models.User user)
{
        var query = db.Users.Where(q => q.UserName == user.UserName 
&& q.Password == user.Password);

        if (ModelState.IsValid)
        {
            //   Session["uname"] = true;
            if (query.Any())
            {            
                if (query.FirstOrDefault().Role.Role1.ToLower() == "admin")
                {
                    Session["admin"] = true;
                    return RedirectToAction("Index", "user");
               }             
               else
               {
                    Session["uname"] = true;
                    return RedirectToAction("Details", "user", 
new { id = query.FirstOrDefault().Id });
               }
          }
     }

     return View(user);
}

这是索引操作

  public ActionResult Index()
  {
        var users = db.Users.ToList();

        if (Session["uname"] != null || Session["Admin"]==null)
        {
            return RedirectToAction("Login", "User" );
        }
        else if (Session["admin"] != null)
        {
            return View(users.ToList());
        }
        else
        {
            return RedirectToAction("About", "Home");
        }
    }

提前致谢。

用户会话结束后显示如下内容

Register | Sign In

Details
UserName
User
Password
User
Role1
User

Edit | Back to List 

您可以设置一个会话变量 Session["userType"],其值可以是 "Admin" 或 "User" 以确定哪种类型的用户正在尝试访问您的 Index 操作方法。

查看 [Authorize] 属性来控制您的访问。

MVC Authorize Attribute

My Query is When Session is Over Only Admin Redirect to Login Page.But when User session is over Then It's Not Redirected to Login Page

在那种情况下你需要 AND 而不是 OR:

if (Session["uname"] != null && Session["Admin"]==null)
{
     return RedirectToAction("Login", "User" );
}

或:

if (Session["uname"] != null)
{
        return RedirectToAction("About", "Home");
}
else if (Session["admin"] != null)
{
        return View(users.ToList());
}
else
{
       return RedirectToAction("Login", "User" );
}

我得到了一个小编辑的解决方案。

索引操作

Public ActionResult Index()
    {          
        var users = db.Users.ToList();
         var session = Session["uname"];
        if (Session["admin"] == null)
        {
            return RedirectToAction("Login", "User");
        }
        else if (Session["admin"] != null)
        {
            return View(users.ToList());
        }
        else
        {
            return RedirectToAction("About", "Home");
        }
    }

当我重定向到详细操作时,我在详细操作中编写了会话空代码。

   public ActionResult Details(int id = 0)
    {
        User user = db.Users.Find(id);
        if (user == null)
        {
            return HttpNotFound();
        }
        if (Session["uname"] == null)
        {
            return RedirectToAction("About", "Home");
        }
        return View(user);
    }

并在 _Layout.cshtml 文件中进行更改

  @if (Session["uname"] == null && Session["admin"]==null)
{
    @Html.ActionLink("Register", "create", "User")

    <span>| </span>

    <strong>@Html.Encode(User.Identity.Name)</strong>
    @Html.ActionLink("Sign In", "Login", "User")
}
else
{
    @Html.ActionLink("Sign Out", "Logout", "User")
}