我们最近遇到了一个ASP.NET应用程序的问题,如果用户转到ourcompany.com
而不是www.ourcompany.com
,他们有时会在不加载数据的页面上数据库。这个问题似乎与我们的SSL证书有关,但我的任务是调查代码方面的方法来解决这个问题。
以下是具体用例:
新用户在“快速注册”(输入姓名,电子邮件,电话)后会收到一个用户注册页面。使用URL中的“www”(例如“www.ourcompany.com”)它可以正常工作,它们可以正常进行。但是,如果他们只浏览“ourcompany.com”或者将其添加为书签,那么当他们访问该页面时,某些数据不会被加载(特别是来自数据库的状态列表),更糟糕的是,如果他们尝试提交页面,被完全踢出并送回主页。
如果有必要,我会详细介绍,但我的问题很简单,如果有应用程序设置,我可以说保持应用程序的会话,无论URL是否具有“www”?此时购买第二个SSL证书不是一种选择,除非没有追索权,我必须在没有其他SSL的情况下寻找解决方法。
有任何想法指出我正确的方向吗?
答案 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前缀的页面,它就会收到重定向响应,并将其发送到正确的页面。
以下是重定向网站主目录属性:
相关主机标头设置:
这可以在不需要更改代码的情况下解决问题,并且可以防止来自Google等的重复搜索结果。
答案 3 :(得分:1)
只是更新,我能够使用web.config条目解决问题:
<httpCookies domain=".mycompany.com" />
添加之后,问题就消失了。