0

当从移动设备浏览我的 ASP.NET 站点时,FormsAuthentication.CookiesSupported 属性有时会在没有任何明显原因的情况下返回 false。例如,我在移动 Safari 中打开我的 ASP.NET 登录页面,并且 FormsAuthentication.CookiesSupported 为 true。经过一段时间的不活动后,我刷新了这个页面,现在 FormsAuthentication.CookiesSupported 是假的。此时我在移动 Chrome 或 Dolphin 中打开同一页面,并且 CookiesSupported 在所有页面中也是错误的。然后我重新启动 IIS,在某些情况下,这会导致 CookiesSupported 在所有浏览器中再次为真,有时它仍然为假。同样,一段时间后它可能会成为现实。在所有浏览器配置中始终启用 Cookie 支持。

在 CookiesSupported 为 false 并且我调用 FormsAuthentication.SetAuthCookie 函数的情况下,ASP.NET 使用 URI 进行身份验证票证。我可以忍受,但更改后的 URI 会导致另一个问题。问题是 WebResource.axd 停止工作。asp:LinkBut​​ton 在呈现时调用 WebForm_DoPostBackWithOptions ,在将 auth cookie 添加到 URI 的情况下未定义。

所以基本上,我有两个问题:

  1. 为什么 FormsAuthentication.CookiesSupported 会间歇性地为移动浏览器(Safari、Chrome、Dolphin)返回 false 以及如何解决此问题?

  2. 为什么将身份验证 cookie 插入 URI 时 WebResource.axd 停止工作?

4

2 回答 2

1

这似乎是与 asp.net 中的浏览器功能有关的问题。它使用用户代理字符串来识别浏览器并匹配它以确定功能。该框架对于 ios 和其他基于移动设备的新浏览器缺乏足够的信息。我认为这已通过 ASP.Net v4.5 修复。

同时,您可以使用此解决方法告诉 ASP.Net 每个(通用)浏览器都支持 cookie:

在您的项目“”中添加一个特殊文件夹App_Browsers。在此文件夹中创建一个名为“ generic.browser”的文件。将以下文本粘贴到此文件中:

<browsers>
    <browser refID="Mozilla">
        <capabilities>
            <capability name="xml" value="true" />
            <capability name="cookies" value="true" />
        </capabilities>
    </browser>
</browsers>
于 2013-07-19T12:04:17.170 回答
0

我终于可以在这里为那些可能在移动浏览器上遇到同样问题的人发布完整的解决方案。

因此,根据abhitalks的回复,我尝试将 generic.browser 文件添加到我的项目中,这解决了 cookie 的第一个问题。但是 WebResource.axd 和缺少 WebForm_DoPostBackWithOptions javascript 代码的问题仍然存在。这个问题是通过告诉框架我们总是处理“高级”浏览器来解决的,即使是移动浏览器也是如此。这是在页面的 PreInit 事件中完成的:

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
        Page.ClientTarget = "uplevel"
End Sub

所以现在移动版本在所有经过测试的移动浏览器上都可以正常工作。

于 2013-07-22T18:44:19.510 回答