Asp.net mvc指定UserAgent没有会话ID

时间:2014-05-16 13:51:39

标签: c# asp.net-mvc session iis redirect

我的项目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地址上。 良好的联系:enter image description here

连接错误:enter image description here

抱歉,我不知道如何让这些图片更大。

3 个答案:

答案 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/

我不知道为什么有必要。有什么想法吗?