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

问题描述:

我有一个管理员和用户会话。如何在asp.net mvc4中将多个会话值设置为null?

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); 
} 

这里是Index操作

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"); 
     } 
    } 

感谢进阶ANCE。

后用户的会话结束它显示是这样的

Register | Sign In 

Details 
UserName 
User 
Password 
User 
Role1 
User 

Edit | Back to List 
+0

你的代码是不工作??? – 2015-03-13 09:21:17

+0

@EhsanSajjad我的代码正在处理我的系统。 – User26 2015-03-13 09:46:27

您可以设置一个会话变量Session["userType"],其值可以是“管理员”或“用户”,以确定什么样的用户试图访问您的索引操作方法。

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

MVC Authorize Attribute

我的查询是当会议结束只有管理员重定向到登录Page.But当用户会话结束,则它不会重定向到登录页面

在这种您需要的案例AND不是

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"); 
} 
+0

Sajjid我m试试你的代码..它不工作.. – User26 2015-03-13 09:48:40

+0

你不是指什么意思,说不工作,不会帮助,这是什么问题 – 2015-03-13 09:59:03

+0

我编辑该问题。请检查它。 – User26 2015-03-13 10:28:13

我得到一个解决方案只是小编辑。

索引操作

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") 
}