ASP.Net无cookie新会话Id无尽重定向
本文关键字:会话 Id 无尽 重定向 Net cookie 新会话 ASP | 更新日期: 2023-09-27 18:13:02
我有一个问题与无尽的重定向。我试图使每个选项卡得到一个新的会话id。我使用
完成了这个工作$.ajax({
type: "POST",
url: $('#setSessionUrl').data('url')+'?windowName='+window.name,
async: false,
success: function (result) {
if (result.relocate == false) {
var url = $('#loginUrl').data('url');
window.location = url;
}
},
error: function () {
var url = $('#loginUrl').data('url');
window.location = url;
}
});
我的控制器动作看起来像
LoginViewModel loginViewModel = new LoginViewModel();
SessionIDManager sessionIdManager = new GuidSessionIdManager();
var context = System.Web.HttpContext.Current;
string newId = sessionIdManager.CreateSessionID(context);
bool redirected, isAdded;
sessionIdManager.SaveSessionID(context, newId, out redirected, out isAdded);
if (!string.IsNullOrEmpty(update))
{
loginViewModel.UpdateStatus = update;
}
return View(loginViewModel);
这是成功地生成一个新的会话id,但它会导致一个无尽的重定向循环。
我已经将此添加到web配置中,但没有运气,因为我注意到小提琴手我正在获得状态码302。我暂时删除了表单认证,但也没有运气
<location path="Views/Login" allowOverride="false">
<system.web>
<authorization>
<allow users="?"/>
<allow users="*"/>
</authorization>
</system.web>
</location>
我的SetSessionId动作是这个
[HttpPost]
public ActionResult SetSessionId(string windowName)
{
if (Session["WindowId"] == null)
{
Session["WindowId"] = windowName;
return Json(new{relocate=true});
}
string window = Session["WindowId"].ToString();
if (window.ToLower()==windowName.ToLower())
return Json(new { relocate = true });
return Json(new { relocate = false ,windowId=windowName});
}
我正在使用无cookie会话。目标是允许多个会话,而不是注销原始会话。
我添加了
context.Response.Redirect(Url.Action("Index"),false);
到我的登录动作,现在它不会无休止地重定向。然而,原来的选项卡被注销。一旦我登录了两个标签,我就有了不同的会话。我怎样才能避免退出原来的选项卡?
我通过修改我的动作来解决这个问题
ViewBag.IgnoreTimeout = true;
LoginViewModel loginViewModel = new LoginViewModel();
SessionIDManager sessionIdManager = new GuidSessionIdManager();
var context = System.Web.HttpContext.Current;
string newId = sessionIdManager.CreateSessionID(context);
bool redirected, isAdded;
sessionIdManager.SaveSessionID(context, newId, out redirected, out isAdded);
context.Session["WindowId"] = windowId;
context.Response.Redirect(Url.Action("Index"),false);
return View("Index",loginViewModel);
关键是这一行
context.Response.Redirect(Url.Action("Index"),false);
有谁能告诉我为什么我必须这样做吗?