Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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 表单身份验证是否与Web负载平衡器一起工作?_Asp.net_Cookies_Session - Fatal编程技术网

Asp.net 表单身份验证是否与Web负载平衡器一起工作?

Asp.net 表单身份验证是否与Web负载平衡器一起工作?,asp.net,cookies,session,Asp.net,Cookies,Session,我正在开发一个使用表单身份验证的web应用程序 <authentication mode="Forms"> <forms slidingExpiration="true" loginUrl="~/User.aspx/LogOn" timeout="15" name="authToken" /> </authentication> 登录时,我在浏览器中看到此cookie

我正在开发一个使用表单身份验证的web应用程序

    <authentication mode="Forms">
        <forms slidingExpiration="true"
         loginUrl="~/User.aspx/LogOn"
         timeout="15"
         name="authToken"  />
    </authentication>

登录时,我在浏览器中看到此cookie集:

问题是当我把这个网站放在一个负载平衡的模型中时会发生什么?正在哪里设置ASP.net会话cookie?我没有在代码中显式地完成它,所以我假设它发生在ASP.Net的某个幕后


另外,如果会话cookie是由web服务器A设置的,我假设web服务器B不会识别它并将其视为无效会话。如果是这样的话,我可能不想用它,对吧

您必须将两台计算机上的计算机密钥设置为相同,名称设置为相同……如果这样做,您应该不会对forms auth的负载平衡产生问题

        <authentication mode="Forms">
        <forms loginUrl="~/Login/Index" defaultUrl="~/"
                     name=".myportal"
                     protection="All" slidingExpiration="true" timeout="20" path="/"
                     requireSSL="false"></forms>
    </authentication>

    <machineKey validationKey="534766AC57A2A2F6A71E6F0757A6DFF55526F7D30A467A5CDE102D0B50E0B58D613C12E27E7E778D137058E" decryptionKey="7059303602C4B0B3459A20F9CB631" decryption="Auto" validation="SHA1"/>

您还需要确保您使用的会话状态提供程序可以跨机器工作(即,不是
mode=“inproc”
),但除此之外,它工作正常。啊。。。我明白了,所以会话cookie必须类似于加密的时间戳。我假设机器密钥用于加密/解密,这就是为什么它需要相同。如果您是负载平衡,您不能使用mode=“InProc”会话。即使是粘性会话也不行。您需要将其存储在IIS、数据库或创建自己的提供程序中。我已经实现了在IIS中存储会话,它工作得很好。为了解密身份验证令牌,您需要共享验证密钥。因此,要更改为sql server,是否简单到:1)在IIS中从InProc更改为sql server 2)在IIS中设置连接字符串(如果需要,显然要安装DB)