2010-07-28 37 views
14

Tôi đang làm việc trên một ứng dụng web đang sử dụng xác thực Mẫu.Xác thực biểu mẫu có hoạt động với Cân bằng tải trên web không?

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

tôi nhìn thấy cookie này thiết lập trong trình duyệt của tôi khi tôi đăng nhập:

alt text

Câu hỏi đặt ra là những gì sẽ xảy ra khi tôi đặt trang web này trong một mô hình cân bằng tải? Cookie phiên ASP.net được đặt ở đâu? Tôi đã không làm điều đó một cách rõ ràng trong mã, vì vậy tôi giả sử nó xảy ra đằng sau hậu trường một nơi nào đó trong ASP.Net.

Ngoài ra, nếu cookie phiên được đặt bởi máy chủ web A, tôi cho rằng máy chủ web B sẽ không nhận ra và coi đó là phiên không hợp lệ. Nếu đây là trường hợp, tôi có lẽ không muốn sử dụng nó, phải không?

Trả lời

16

Bạn sẽ phải đặt phím máy giống nhau và tên giống nhau trên cả hai máy ... nếu điều này được thực hiện, bạn sẽ không gặp vấn đề tải cân bằng với biểu mẫu 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"/> 

Phiên có thể hơi phức tạp hơn một chút. Bạn có thể lưu trữ trạng thái phiên ASP.Net trong cơ sở dữ liệu hoặc sử dụng một nhà cung cấp phiên chia sẻ để làm cho nó có sẵn để cân bằng tải là tốt.

Đây là một bài viết tốt về lưu trữ trạng thái phiên trong DB: http://idunno.org/articles/277.aspx

+0

Bạn cũng cần phải chắc chắn rằng bạn đang sử dụng một nhà cung cấp trạng thái phiên làm việc với các máy khác (ví dụ: * không * 'mode = "InProc" '), nhưng khác hơn thế, yeah nó hoạt động tốt. –

+0

Ahh ... Tôi hiểu, vì vậy cookie phiên phải giống như một dấu thời gian được mã hóa. Tôi cho rằng khóa máy được sử dụng để mã hóa/giải mã và đó là lý do tại sao nó cần phải giống nhau. –

+0

Nếu bạn cân bằng tải, bạn không thể sử dụng Session of mode = "InProc". Không, ngay cả với các buổi dính. Bạn cần lưu trữ nó trong IIS, một cơ sở dữ liệu hoặc tạo nhà cung cấp của riêng bạn. Tôi đã thực hiện lưu trữ các phiên trong IIS và nó hoạt động tốt. – TheGeekYouNeed

Các vấn đề liên quan