在我的应用程序中转到没有“www”的页面会导致页面无法加载

时间:2011-07-20 12:53:28

标签: asp.net session-state

我们最近遇到了一个ASP.NET应用程序的问题,如果用户转到ourcompany.com而不是www.ourcompany.com,他们有时会在不加载数据的页面上数据库。这个问题似乎与我们的SSL证书有关,但我的任务是调查代码方面的方法来解决这个问题。

以下是具体用例:

新用户在“快速注册”(输入姓名,电子邮件,电话)后会收到一个用户注册页面。使用URL中的“www”(例如“www.ourcompany.com”)它可以正常工作,它们可以正常进行。但是,如果他们只浏览“ourcompany.com”或者将其添加为书签,那么当他们访问该页面时,某些数据不会被加载(特别是来自数据库的状态列表),更糟糕的是,如果他们尝试提交页面,被完全踢出并送回主页。

如果有必要,我会详细介绍,但我的问题很简单,如果有应用程序设置,我可以说保持应用程序的会话,无论URL是否具有“www”?此时购买第二个SSL证书不是一种选择,除非没有追索权,我必须在没有其他SSL的情况下寻找解决方法。

有任何想法指出我正确的方向吗?

4 个答案:

答案 0 :(得分:3)

当您的用户转到www.ourcompany.com时,他们会获得www子域的会话Cookie。默认情况下,Cookie不会跨子域共享,这就是前往ourcompany.com的用户无法访问其会话的原因。

有一个讨论此问题的有用帖子here。建议的解决方案是:

  

顺便说一下,我今天实施了一个相当不错的修复/黑客。把这段代码   在每个页面上:Response.Cookies [“ASP.NET_SessionId”]。值=   Session.SessionID; Response.Cookies [“ASP.NET_SessionId”]。Domain =   “.mydomain.com来”;

     

这两行代码重写了Session cookie,现在就是这样   可跨子域访问。

     道格,2005年8月23日

答案 1 :(得分:1)

当然,你正试图解决错误的问题?

您是否可以实施URL重写并使其保持一致?

例如,http://example.com重定向到http://www.example.com

有关管理重写的示例,请参阅:

http://paulstack.co.uk/blog/post/iis-rewrite-tool-the-pain-of-a-simple-rule-change.aspx

答案 2 :(得分:1)

从浏览器的角度来看,www.mysite.com是与mysite.com不同的网站。

如果您有重写引擎,请添加规则以将所有请求发送到尚未拥有它的www。

或(这就是我所做的)使用“mysite.com”主机标头添加单独的IIS站点,并设置IIS标志以将所有流量重定向到www

在上述任何一种情况下,只要浏览器请求没有www前缀的页面,它就会收到重定向响应,并将其发送到正确的页面。

以下是重定向网站主目录属性:

enter image description here

相关主机标头设置:

enter image description here

这可以在不需要更改代码的情况下解决问题,并且可以防止来自Google等的重复搜索结果。

答案 3 :(得分:1)

只是更新,我能够使用web.config条目解决问题:

<httpCookies domain=".mycompany.com" />

添加之后,问题就消失了。