使用IE8和MVC FileContentResult进行身份验证丢失

时间:2011-08-01 00:49:02

标签: asp.net-mvc cookies forms-authentication

  • ASP.NET MVC2
  • .NET 3.5
  • FormsAuthentication
  • 网址:domain.com/myapp
  • 问题区域:动态创建的PDF作为FileContentResult
  • 返回

在IE8之前一切正常。使用IE8,当用户打开PDF然后返回应用程序时,他已经失去了身份验证。我在表单auth cookie上添加了一个到期日,问题似乎得到了解决。但是,我后来发现父应用程序中出现了同样的问题。使用持久性cookie,当用户继续使用我的应用程序(domain.com/myapp)时,一切都很好,但当他返回到父应用程序(domain.com)窗口时,他已经失去了身份验证。父应用程序使用专有的身份验证和授权体系结构,该体系结构依赖于会话状态。

所以我对问题的理解是FileSystemResult不携带任何会话信息,因此会话丢失。我了解到,通过向Cookie添加过期,Cookie会保留,并且即使在打开文档时,也会允许授权在我的应用中保留。

我不太明白为什么在我的cookie中添加一个到期时间将问题转移到父应用程序。所以,我错了,这在父母一直都在发生。有趣的是,当我联系Fiddler观察正在发生的事情时,问题就消失了。

您有解决此问题的建议吗?除了将文件写入服务器并返回带有直接打开文件的链接的页面之外,我无法想到任何其他内容。

基于this question,我认为自己已经被软管了。

1 个答案:

答案 0 :(得分:1)

IE8处理持久性cookie的方式有一些变化,这可能是你的问题的路径。这里有一个有趣的post描述了一种可能的解决方案。

  

解决方案花了我们很长时间才发现网上信不信由你,   当我们发现它时,我们想要自己找不到它   更早。这一切都源于表单的域属性   您的web.config文件中的身份验证设置   应用。我们通常会在应用中将该属性留空   让它更容易发展。此外,上面没有其他浏览器   关心那个设置,运作得很好。但是,那   在IE8中更改,现在该属性是必需的。