首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET不顾"UseCookies“设置将会话状态注入URL

问ASP.NET不顾"UseCookies“设置将会话状态注入URL
EN

Stack Overflow用户
提问于 2013-08-20 08:09:19
回答 1查看 1.2K关注 0票数 1

在我的ASP.NET MVC3应用程序中,我有以下路由定义:

代码语言:javascript
复制
routes.MapRoute( "Sso", "MyController/Sso",
    new { controller = "MyController", action="Sso" } );
routes.MapRoute( "Settings", "MyController/Settings/{objectId}",
    new { controller = "MyController", action="Settings", objectId = @"" } );

在MyController里面我有这样的东西:

代码语言:javascript
复制
[My]
public ActionResult Sso( list of parameters )
{
    //blah - nothing that would yield a redirect, then
    FormsAuthentication.SetAuthCookie("MagicSso." + someGuid, false);
    return RedirectToAction("Settings", new { objectId = someGuid } );
}

MyAttribute类继承System.Web.Mvc.ActionFilterAttribute并重写OnResultExecuted(),后者记录ResultExecutedContext.HttpContext.Response.RedirectLocation的值。

在测试中,它工作得很好,当OnResultExecuted()运行时,它将/MyAccount/Settings/some-guid-as-expected-here记录为重定向目标,就像预期的那样。还请注意,objectId是正确映射的,因此正确的路由是匹配的。

然而,在生产中,会发生以下情况。向https://my.domain.name/MyController/Sso发出请求,当OnResultExecuted()运行时,它会记录类似于/some-very-long-string-290-characters-long-here/MyAccount/Settings/some-guid-as-expected-here的重定向目标。看起来,这就是用户接收并试图遵循的内容--我看到HTTPERR日志中的请求来自外部世界,代码400失败(糟糕的请求)。

我不想在这里发布随机字符串,因为我不确定它是否揭示了任何敏感数据。它每次都包含相同数量的字符,总是以(F(开头,总是以))结尾,所有其他字符都是大写和小写拉丁字符和数字,用偶发的破折号和下划线分隔,没有任何明显的规则。除此之外,它看起来完全是随机的。

经过大量的搜索,我很确定奇怪的字符串是以“无炊具”的方式发送给客户端的ASP.NET会话状态。所以我检查了在我的应用程序中,System.Web.HttpSessionStateBase.CookieMode返回UseCookies,System.Web.HttpSessionStateBase.IsCookieless返回false,(System.Web.Configuration.SessionStateSection)System.Web.Configuration.WebConfigurationManager.GetSection("system.web/sessionState").Cookieless也返回UseCookies。因此,我或多或少地确定,ASP.NET配置为将会话状态作为cookie返回,而不管客户机喜欢什么。

为什么RedirectToAction()会突然向重定向目标注入一些类似于编码会话状态的随机字符串?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-02 10:31:16

原来有两个完全不同的设置--一个来自system.web/sessionState,另一个来自system.web/authentication/forms/cookieless和have different values by default。后者默认具有UseDeviceProfile,因此有时会将表单身份验证令牌插入到URL中。

在我们的例子中,这种配置是没有意义的--如果用户没有cookies支持,他就不能使用我们的站点,因为它严重依赖cookies,所以我们只是将system.web/authentication/forms/cookieless改为UseCookies。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18329994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档