使相同的cookie在不同的Azure实例之间可读

时间:2013-12-18 13:20:44

标签: c# asp.net cookies azure azure-web-roles

在我的网站上有一个注册表。填写完成后,用户将被重定向到Azure ACS以便登录。登录后,用户将被重定向回我的网站并注册并登录。

在将用户转移到ACS之前,注册表单的信息将保存在cookie中,以便在用户返回时进行读取。 Azure可能会突然更改我的webrole的服务器实例,并且在这些情况下似乎无法读取cookie。由于用户被转移到ACS,似乎我无法将注册信息存储在会话中。我想我需要使用cookies。有没有办法在不同的Azure实例之间使相同的cookie可读?或者有更好的解决方案吗?谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

与在多个服务器上的任何网站一样,您需要将会话数据存储在可在所有实例中使用的数据库或其他存储中。

这是一篇博文,详细介绍了Azure网络角色中提供的选项:http://blogs.msdn.com/b/cie/archive/2013/05/17/session-state-management-in-windows-azure-web-roles.aspx

话虽如此,我不知道为什么cookie在Azure实例之间不起作用。你在做什么设置/读取cookie?

答案 1 :(得分:1)

首先,您可以像使用任何其他Web应用程序一样在Windows Azure云服务中使用会话变量您不能做的是使用In-Proc会话状态管理。正如@CoderDennis所提到的,您需要将会话状态存储在所有实例都可以访问的位置。

我的建议是使用Windows Azure Role Based Cache并使用该会话状态提供程序进行会话状态管理。您可能会发现此链接有助于执行此操作:http://www.windowsazure.com/en-us/manage/services/cache/net/how-to-in-role-cache/#store-session

即将推出基于cookie的解决方案。请记住,您的所有实例都位于负载均衡器后面,因为所有实例都将共享相同的域名,所以您无需在Azure实例之间读取Cookie。

答案 2 :(得分:1)

对于共享存储,您可以将数据存储在azure表而不是数据库中。根据您的要求,您可能不需要完全成熟的DB来执行此操作。 Azure表格可靠,扩展性好,使用和管理非常简单。