Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 会话Cookie未被覆盖_C#_Asp.net Mvc - Fatal编程技术网

C# 会话Cookie未被覆盖

C# 会话Cookie未被覆盖,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个asp.NETMVC项目,当有人访问主页时,它会根据他们工作的部门显示许多按钮。 然后,他们可以选择要登录的部门 然后,下面的控制器使用适当的construcd设置会话cookie 但是,如果他们再次登录到其他部门,cookie不会被新的压缩文件覆盖 public ActionResult SetContractId(int contractId) { Session["LoggedContractId"] = contractId;

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

然后,下面的控制器使用适当的construcd设置会话cookie

但是,如果他们再次登录到其他部门,cookie不会被新的压缩文件覆盖

        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>

}

有什么想法吗?

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

但是,如果他们在其他部门下再次登录
这是什么意思?只是澄清一下:会话数据不是cookie。用户机器上的cookie持有一个密钥,合同ID保存在该用户服务器上的内存中。因此,更改合同ID不会更改cookie(相同的密钥)。很难说,您发布的代码看起来不错。您能在
setconstrucd
中更改会话数据的行中添加一个断点并验证其调用情况吗?我看不出有任何错误。因此,如果在两种方法中都设置断点:会话数据在第一种方法中设置正确
setconstrucd
,然后在第二种方法中恢复为旧值
StartDebrief
?@LennartStoop感谢我在处理会话数据的代码中进一步发现了错误。感谢您的帮助和耐心。我使用按钮上的操作链接来调用它,我已经更新了帖子以显示我在视图中使用的代码。答案不是为了要求澄清。
 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);
        }
    }