Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用子域时正在重置的会话_Asp.net_Sql Server_Session_Session State_Web Config - Fatal编程技术网

Asp.net 使用子域时正在重置的会话

Asp.net 使用子域时正在重置的会话,asp.net,sql-server,session,session-state,web-config,Asp.net,Sql Server,Session,Session State,Web Config,我试图在我的ASP.NET网站中使用子域,但在重置会话时遇到了一些问题 我已将主机文件编辑为“localhost”、“one.localhost”和“two.localhost”。我可以转到这些URL中的任何一个,做我需要做的事情,然后登录到我的系统。会话模式在web.config中定义如下: <sessionState cookieless="false" mode="SQLServer" timeout="300" sqlConnectionString="Data

我试图在我的ASP.NET网站中使用子域,但在重置会话时遇到了一些问题

我已将主机文件编辑为“localhost”、“one.localhost”和“two.localhost”。我可以转到这些URL中的任何一个,做我需要做的事情,然后登录到我的系统。会话模式在web.config中定义如下:

<sessionState cookieless="false" mode="SQLServer" timeout="300" 
        sqlConnectionString="Data Source=MyDatabase;user id=User1;password=pass"/>

我正在使用SQLServer,因为该网站将作为webfarm运行

我发现,当我单击某个导致回发的内容时,所有会话都会丢失,并且会创建一个新会话id,当这种情况发生时,我的网站现在是“localhost”,而不是登录的“one.localhost”

有人知道这可能是什么原因吗


Cheers

基本上,登录cookie中设置的域特定于one.localhost

有一些可能的黑客。例如,参见以下问题的最后一个答案:

在登录/开始页面中,运行以下操作:

Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID;
Response.Cookies["ASP.NET_SessionId"].Domain = ".mydomain.com";

基本上,登录cookie中设置的域特定于one.localhost

有一些可能的黑客。例如,参见以下问题的最后一个答案:

在登录/开始页面中,运行以下操作:

Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID;
Response.Cookies["ASP.NET_SessionId"].Domain = ".mydomain.com";

你的问题似乎有几个问题:

  • 跨多个子域共享会话信息
  • 登录到多个域
  • 在回发期间保持在正确的域上
  • 要跨多个子域共享会话信息,您需要将会话cookie写入正确的域,在本例中为
    。example.com
    -请参阅此处的更多信息:

    如果您希望用户同时登录所有域,并且您正在使用表单身份验证,则可以使用的
    属性(请注意域路径中的前导周期):

    
    
    您需要在所有站点上配置此选项

    至于为什么回发时会将您重定向到localhost而不是一个.localhost,您需要查看已呈现的源(您是否包含一些基本href信息,或者您的表单是否显式回发到localhost而不是一个.localhost)?查看浏览器正在执行的操作的一个好工具是


    最后,当您将其部署到多台服务器时,请注意不要忘记在所有站点上部署,以确保它们具有相同的值,以便它们可以正确解密会话、登录令牌、视图状态等。

    您的问题似乎有两个问题:

  • 跨多个子域共享会话信息
  • 登录到多个域
  • 在回发期间保持在正确的域上
  • 要跨多个子域共享会话信息,您需要将会话cookie写入正确的域,在本例中为
    。example.com
    -请参阅此处的更多信息:

    如果您希望用户同时登录所有域,并且您正在使用表单身份验证,则可以使用的
    属性(请注意域路径中的前导周期):

    
    
    您需要在所有站点上配置此选项

    至于为什么回发时会将您重定向到localhost而不是一个.localhost,您需要查看已呈现的源(您是否包含一些基本href信息,或者您的表单是否显式回发到localhost而不是一个.localhost)?查看浏览器正在执行的操作的一个好工具是


    最后,当您将其部署到多个服务器时,请注意,不要忘记在所有站点上部署,以确保它们具有相同的值,以便它们可以正确解密会话、登录令牌、视图状态等。

    下面是另一个链接,该链接更详细地描述了@Damien_非信徒发布的解决方案。下面是另一个链接,描述了@Damien_这个不信者更详细地发布的解决方案。