会话Cookie不会被覆盖

时间:2018-10-13 12:46:35

标签: c# asp.net-mvc

我有一个asp.net MVC项目,当某人访问主页时,它会根据他们工作的部门显示许多按钮。 然后,他们可以选择要登录的部门。

然后,以下控制器使用适当的contractId设置会话cookie。

但是,如果他们在其他部门下再次登录,则cookie不会被新的contractId覆盖

        public ActionResult SetContractId(int contractId)
    {

        Session["LoggedContractId"] = contractId;

        return RedirectToAction("IndexLoggedIn");
    }

我使用以下方法从视图中显示的按钮中调用上述内容:

@foreach (var item in Model)
{
<div class="col-lg-offset-4 col-md-8" style="margin-bottom: 25px">
    @Html.ActionLink("Login under this Contract", "SetContractId", new { contractId = item.ContractId }, new { @Class = "btn btn-primary" }) <b>@Html.DisplayFor(modelItem => item.DepartmentName)</b>
</div>

}

我使用此cookie值为他们设置系统。我这样使用会话变量:

 public ActionResult StartDebrief()
    {
        if (Session["LoggedContractId"] == null)
        {
            return RedirectToAction("IndexLogin", "Home", null);
        }
        else
        {
            var user = User.Identity.Name;
            string userName = user.Substring(7);
            var creator = Peopledb.People.FirstOrDefault(x => x.Username == userName);
            var creatorContractId = (int)Session["LoggedContractId"];

            //Use creatorContractId in the viewmodel and other areas

            return View(viewModel);
        }
    }

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在我看来,您用于更新会话信息的代码看起来不错。这意味着会话数据应正确更新。但是,可能没有正确调用此函数。尝试调试功能SetContractId()。重新登录后,您在哪里调用此函数?