我的项目Asp.net mvc 1.0与.net framework 2.0有问题。我的应用程序托管在IIS 7.5上。我的身份验证表单如下所示:
<authentication mode="Forms">
<forms protection="All" loginUrl="~/Account/LogOn" timeout="60" cookieless="UseUri" />
</authentication>
<httpRuntime executionTimeout="1000" maxRequestLength="600000" />
<sessionState mode="InProc" cookieless="UseUri" timeout="60">
</sessionState>
当用户连接到网页时,他会收到存储在URL中的会话ID。当我使用默认的UserAgent(在每个浏览器中,Chrome / FF / IE)连接到我的网页时,一切正常。当我覆盖浏览器UserAgent并尝试连接用户代理XXXXXXXX.UP.BROWSER时,我收到一个无限重定向循环来解决
http://<IP>_redir=1
但是当我连接到默认网页IIS时 - 用户代理并不重要,一切都很好,所以它必须是指定的UserAgent和我的应用程序的问题。我试图找到XXXXXXXX.UP.BROWSER UserAgent的任何过滤器但是没有任何过滤器。当我研究应用程序生命周期时,我试图找到良好连接和错误连接之间的差异,并发现未执行的函数是:
Application_AcquireRequestState
Application_PostAcquireRequestState
Application_PreRequestHandlerExecute
Application_PostRequestHandlerExecute
Application_ReleaseRequestState
Application_PostReleaseRequestState
Application_UpdateRequestCache
Application_PostUpdateRequestCache
我找到的另一个线索是,&#34;错误&#34; connection - 会话对象为空。
总结一下:使用指定用户代理连接到我的应用程序网页会产生无限重定向循环,可能是因为缺少会话ID。可能是什么问题?
编辑:我发现包含&#34; UP.Browser&#34;的用户代理与移动有关。当我将cookieless更改为&#34; UseCookies&#34;一切正常。为什么选择&#34; UseUri&#34;不适用于手机吗?
EDIT2:/ admin - &gt;我的网页托管在指定的IP地址上。 良好的联系:
连接错误:
抱歉,我不知道如何让这些图片更大。
答案 0 :(得分:1)
http://msdn.microsoft.com/en-us/library/aa479315.aspx
所以你要在URI中加入两个不同的值,一个用于会话,一个用于表单,这可能会创建一个冗长的URI:
&#34;此功能的主要限制是可以存储在URL中的数据量有限。此功能不针对常见的浏览器,例如IE,因为它们支持cookie并且不需要此功能。不支持cookie的浏览器是移动设备(如手机)上的浏览器,这些浏览器通常严格限制它们支持的URL的大小。因此,使用此功能时要小心 - 尝试确保应用程序生成的无cookie字符串很小。&#34;
我的猜测是无限重定向循环的关键是这个功能:
"// Step 5: We can't detect if cookies are supported or not. So, send a
// challenge to the client. We do this by sending a cookie, as
// well as setting a query string variable, and then doing a
// redirect back to this page. On the next request, if cookie
// comes back, then Step 3 will report that "cookies are
// supported". On the other hand, if the next request does not
// have any cookies, then Step 4 will report "cookies not
// supported".
SetAutoDetectionCookie();
Redirect(ThisPage + Our_auto_detect_challenge_variable);"
不幸的是,这听起来像是一种架构重新思考,因为它现在可能会影响您网站的完整路径,并且您可能不得不放弃自动处理表单身份验证。
答案 1 :(得分:1)
正如您所说的问题是针对移动浏览器的,我认为此问题仅限于不支持Cookie的设备(MOBILE),并且URL的大小增加,移动浏览器严重限制该大小,如以上MSDN参考文章。
答案 2 :(得分:0)
我的解决方案是更改包含&#34; UP.Browser&#34;使用重写规则来做其他事情。一切正常;)
编辑:我找到了另一条线索。 在移动浏览器中 - 这些用户代理包含&#34; UP.Browser&#34;,有必要在地址的地址添加斜杠。 总之:
对于与&#34; UP.Browser&#34;无关的用户代理,一切正常。 用户代理包含&#34; UP.Browser&#34;需要的地址如:
http://addr/controller/
我不知道为什么有必要。有什么想法吗?