C# 在授权过程中丢失cookie和会话变量
我目前正致力于建立一个测试环境(目前称为DEV),并且遇到了一些奇怪的问题 当你第一次来到这个网站,我们有一个协议页面。点击“我同意”按钮将迫使用户通过一个动作来检查他们是否已经是该站点的成员。我们也使用演示模式,但这不是问题的一部分 我目前遇到的问题如下。最初在操作中,我们创建了一个名为“siteaccept”的Cookie。创建后,我们确定站点是否处于演示模式,然后继续获取用户(实际用户或演示用户)。一旦找到用户,我们将其Id记录在一个名为“cntPOC”的Cookie中,并使用相同的数据创建一个同名的会话变量(最初的开发人员编写了很多复杂的逻辑,我想在有人问为什么要保留会话和Cookie之前对其进行更改)。然后,我们对该操作执行重定向操作,以打开该站点的主页 这就是问题所在。网站行为的主页上有一个自定义属性装饰。在CustomAuthorizeAttribute类中,OnAuthorizion和AuthorizeCore被覆盖。OnAuthorizion首先触发,但是它使用base.OnAuthorizion。一旦调用了它,就会调用AuthorizeCore。在AuthorizeCore中,我们检查“siteaccept”Cookie,然后检查“cntPOC”会话变量。如果两者都存在,则返回true,如果其中一个失败,则返回false 不仅在我的本地环境中,而且在DBA的环境中,这都可以顺利工作。我看到我们的Cookies和会话变量。但是,在我们的开发环境中,Cookies和Session变量都丢失了。我们已经将IE 11配置为允许cookie,但是一旦我们离开操作并进入CustomAuthorization属性,就无法获取cookie 我确实发现,如果我检查HttpContext.Current.Response而不是HttpContext.Current.Request,我今天就可以找到Cookie,但这显然是不正确的方法 下面是我的代码。我相当肯定,因为代码在我的本地环境中工作,所以在我们的开发环境中应该可以。另外请注意,我们的生产环境确实有效,因此代码显然可以正常工作。现在的问题是,为什么开发环境没有 MainController.csC# 在授权过程中丢失cookie和会话变量,c#,asp.net-mvc-3,cookies,session-variables,custom-authentication,C#,Asp.net Mvc 3,Cookies,Session Variables,Custom Authentication,我目前正致力于建立一个测试环境(目前称为DEV),并且遇到了一些奇怪的问题 当你第一次来到这个网站,我们有一个协议页面。点击“我同意”按钮将迫使用户通过一个动作来检查他们是否已经是该站点的成员。我们也使用演示模式,但这不是问题的一部分 我目前遇到的问题如下。最初在操作中,我们创建了一个名为“siteaccept”的Cookie。创建后,我们确定站点是否处于演示模式,然后继续获取用户(实际用户或演示用户)。一旦找到用户,我们将其Id记录在一个名为“cntPOC”的Cookie中,并使用相同的数据创
[HttpPost]
public ActionResult Index(FormCollection frmCollection)
{
try
{
Response.Cookies.Remove("bracmisaccept");
HttpCookie cookie = new HttpCookie("bracmisaccept");
cookie.Value = "true";
Response.Cookies.Add(cookie);
...
//Demo Mode
var poc = new HttpCookie("cntPOC");
cookie.Value = "7578";
Response.Cookies.Add(poc);
Session["cntPOC"] = 7578;
return RedirectToAction("ApplicationSelection");
}
catch (Exception ex)
{
logger.LogError("Main Index", ex);
return PartialView(@"../Error/ExceptionHandling");
}
}
[CustomAuthorizeAttribute]
public ActionResult ApplicationSelection()
{
return View();
}
自定义属性.cs
public string RedirectUrl = "~/Main/SessionTimeout";
public string CookieExpiredRedirectUrl = "~/Main/Index";
public string AjaxRedirectUrl = "~/Error/AjaxError";
private bool _isAuthorized;
private bool _isCookieExpired;
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (HttpContext.Current.Request.Cookies["siteaccept"] == null)
{
_isAuthorized = false;
_isCookieExpired = true;
return false;
}
if (HttpContext.Current.Session["cntPOC"] == null)
{
_isAuthorized = false;
return false;
}
return true;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (!_isAuthorized)
{
if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.StatusCode = 401;
filterContext.HttpContext.Response.End();
}
else
{
if(_isCookieExpired)
filterContext.RequestContext.HttpContext.Response.Redirect(CookieExpiredRedirectUrl);
else
filterContext.RequestContext.HttpContext.Response.Redirect(RedirectUrl);
}
}
}
我相当肯定代码是好的,但我确实在几篇文章中读到过,AuthorizeCore有时可能有,也可能没有cookie和会话变量。我只是想知道我是不是在浪费时间修改代码,还是我们这个网站的盒子。服务器被超级锁定了,所以是的,有点烦人
编辑:我还没有弄清楚如何解决这个问题,但是,我发现如果我发布了这个代码,我就可以正确地进入这个网站。我仍然无法运行localhost来检查该站点,但发布修复了一些小问题,即该站点上的工作是否正常