2010-07-28 48 views
14

我正在使用表單身份驗證的Web應用程序。表單身份驗證是否適用於Web負載平衡器?

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

我看到這個cookie在瀏覽器設置,當我登錄:

alt text

的問題是,當我把這個網站在負載平衡模式會發生什麼? ASP.net會話cookie在哪裏設置?我沒有在代碼中明確地做到這一點,所以我認爲它發生在ASP.Net的幕後。另外,如果會話cookie由Web服務器A設置,我假設Web服務器B不會識別它並將其視爲無效會話。如果是這種情況,我可能不想使用它,對吧?

回答

16

您必須將機器密鑰設置爲相同,且兩臺機器上的名稱必須相同......如果已完成,則不應使用表單身份驗證進行負載平衡。

 <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"/> 

會話可能會稍微複雜一些。您可以將ASP.Net會話狀態存儲在數據庫中,也可以使用共享會話提供程序使其可用於負載平衡。

這裏是在數據庫中存儲會話狀態的好文章:http://idunno.org/articles/277.aspx

+0

您還需要確保您使用的是會話狀態提供跨設備的工作原理(即*不*'模式=「進程內」 '),但除此之外,是的,它工作得很好。 – 2010-07-28 21:57:45

+0

啊......我明白了,所以會話cookie必須像加密時間戳那樣。我假設機器密鑰用於加密/解密,這就是爲什麼它需要相同。 – 2010-07-28 21:58:02

+0

如果您是負載平衡,則不能使用mode =「InProc」的Session。即使有粘滯的會議。您需要將其存儲在IIS,數據庫或創建自己的提供程序。我已經實現了將會話存儲在IIS中,它工作得很好。確切地說,是 – TheGeekYouNeed 2010-07-28 22:00:41