C# 会话Cookie未被覆盖
我有一个asp.NETMVC项目,当有人访问主页时,它会根据他们工作的部门显示许多按钮。 然后,他们可以选择要登录的部门 然后,下面的控制器使用适当的construcd设置会话cookie 但是,如果他们再次登录到其他部门,cookie不会被新的压缩文件覆盖C# 会话Cookie未被覆盖,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个asp.NETMVC项目,当有人访问主页时,它会根据他们工作的部门显示许多按钮。 然后,他们可以选择要登录的部门 然后,下面的控制器使用适当的construcd设置会话cookie 但是,如果他们再次登录到其他部门,cookie不会被新的压缩文件覆盖 public ActionResult SetContractId(int contractId) { Session["LoggedContractId"] = 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>
}
有什么想法吗?我认为您更新会话信息的代码看起来不错。这意味着应该正确更新会话数据。但是,对该函数的调用可能不正确。尝试调试函数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);
}
}