如何在ASP.NET中跨多个子域共享会话?

mar*_*lar 14 asp.net iis session

我有一个应用程序,在使用该应用程序的过程中,用户可能会点击

virginia.usa.com
Run Code Online (Sandbox Code Playgroud)

newyork.usa.com
Run Code Online (Sandbox Code Playgroud)

由于每次用户从一个子域跨越到另一个子域时我不想创建新会话,在多个子域之间共享会话信息的好方法是什么?

Mat*_*lly 37

您使用ASP.NET和IIS对此进行了标记,因此我认为这是您的环境.确保你的web.config中有这个:

<httpCookies domain=".usa.com"/>
Run Code Online (Sandbox Code Playgroud)

如果您的2个子域名映射到同一个应用程序,那么您就完成了.但是,如果它们是不同的应用程序,则需要执行一些额外的工作,例如使用基于SQL Server的会话存储(以及黑客存储过程以确保所有应用程序共享相同的会话数据)或使用HttpModule拦截应用程序名称因为即使使用共享cookie和相同的机器密钥,2个应用程序仍将使用2个不同的存储来存储其会话数据.

  • 我在我的localhost上尝试了这个(在我的hosts文件中有子域)但它不起作用.我可以很好地提升子域名,但是,从一个域转到另一个会导致会话丢失并且用户必须再次登录.有任何想法吗? (2认同)