当从移动设备浏览我的ASP.NET站点时,FormsAuthentication.CookiesSupported属性有时会返回false而没有任何明显的原因。例如,我在移动Safari中打开我的ASP.NET登录页面,并且FormsAuthentication.CookiesSupported为true。经过一段时间的不活动后,我刷新了这个页面,现在FormsAuthentication.CookiesSupported为false。此时我在移动Chrome或Dolphin中打开同一页面,CookiesSupported在所有这些页面中都是假的。然后我重新启动IIS,在某些情况下,这会导致CookiesSupported再次成为现实,有时它在所有浏览器中仍然是错误的。再过一段时间后,它可能会变成现实。所有浏览器配置中都始终启用Cookie支持。
如果CookiesSupported为false并且我调用FormsAuthentication.SetAuthCookie函数,则ASP.NET使用URI作为身份验证票证。我可以忍受,但改变的URI会导致另一个问题。问题是WebResource.axd停止工作。 asp:LinkButton在渲染时调用WebForm_DoPostBackWithOptions,这在auth cookie添加到URI时没有定义。
基本上,我有两个问题:
为什么FormsAuthentication.CookiesSupported会间歇性地为移动浏览器(Safari,Chrome,Dolphin)返回false以及如何修复它?
为什么在将身份验证cookie插入URI时WebResource.axd会停止工作?
答案 0 :(得分: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>
答案 1 :(得分: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
所以现在移动版在所有经过测试的移动浏览器上运行良好。