2013-03-25 72 views
4

我在Azure网站上有两个网站,我使用CNAME将它们与我自己的域名一起使用。Azure网站 - 跨子域共享登录状态

我们调用两个站点site1.example.com和site2.example.com。

我正在使用ASP.NET MVC 4和SimpleMembership。我希望用户能够在site1.example.com上登录,并且登录状态将被site2.example.com接受。

这是我到目前为止已经完成:

  • 双方1和Site2在相同的会员数据库(连接字符串设定相同的两个在web.config中,并InitializeSimpleMembershipAttribute集看那个指点连接字符串)
  • 我已经将Cookie域设置为.example.com(在web.config中,system.web身份验证部分)
  • 我已手动将systemKey中的machineKey设置为system.web的配置两个网站

但是,如果我在site1上登录,那么我没有在site2上登录。我可以看到.ASPXAUTH cookie在.example.com上正确设置,因此它们都可见。

那么,我错过了什么?

+1

您很可能错过了这两个网站的常见'session'商店。坦率地说,我认为在“内部IIS”与“Azure网站”中实现目标没有任何区别。首先尝试在本地实现您的目标,然后询问Azure具体的事情,如果有的话。你用本地IIS实现了你的目标吗? – astaykov 2013-03-25 18:49:53

+0

你能告诉我们更多关于这些网站的问题吗?他们都是* MVC 4,*都是针对.NET 4等吗? – Levi 2013-03-26 05:45:56

+0

@Levi,.NET 4.5和MVC 4. – 2013-03-26 09:07:55

回答

0

如果您正在使用AJAX请求登录(通过Web API等),尽量包括

xhrFields: { withCredentials: true } 

$.ajax({ method: 'POST', 
     url: 'yourloginurl.com/api/login', 
     xhrFields: { withCredentials: true }, 
     success: function (data) { ... } }); 

设置的HttpCookie域之后。

我花了一天的时间来找到这个解决方案,这解决了我的问题。