2011-01-02 28 views
7

Tôi có trang web Asp Mvc 2 bằng cách sử dụng xác thực biểu mẫu. Khi tôi chạy nó cục bộ, tôi có thể đăng nhập và duy trì trạng thái đăng nhập vô thời hạn.Tại sao người dùng của tôi có thể bị đăng xuất sau một phút?

Tuy nhiên khi tôi đặt nó trên máy chủ tôi dường như chỉ đăng nhập trong một vài phút và sau đó dường như được đăng xuất. Tôi đã xem xét các cookie và có 2 cookie có vẻ liên quan:

.ASPXAUTH là cookie phiên .ASPXANONYMOUS hết hạn sau 3 tháng.

Khi tôi làm mới trang, cookie sẽ giữ nguyên cho đến khi tôi bị đăng xuất, khi tôi có vẻ có cookie mới .ASPXANONYMOUS, nhưng .ASPXAUTH có vẻ giống nhau.

Dường như tôi có thể duy trì trạng thái đăng nhập cho đến khi tôi làm điều gì đó sau một khoảng thời gian nhất định. Nếu tôi gửi biểu mẫu ngay sau khi tôi đăng nhập thì nó hoạt động tốt, nhưng nếu tôi tiếp tục gửi dữ liệu lặp đi lặp lại sau một phút hoặc lâu hơn, một trong các lần gửi sẽ xảy ra với tư cách người dùng đã đăng xuất và không phải là người dùng đã được đăng nhập, tất cả các lần gửi khác đều hoạt động như.

Điều gì có thể gây ra hành vi này và cách tôi có thể theo dõi những gì khác nhau & thay đổi nó để tôi có thể duy trì trạng thái đăng nhập vô thời hạn?

EDIT,

của một máy chủ duy nhất, nhưng sau khi một số điều tra và tìm kiếm các ứng cử viên có khả năng dường như là tôi đang sử dụng hơn 100MB trên máy chủ và các hồ bơi ứng dụng được việc tái chế. Tôi cho rằng bây giờ tôi cần biết

  • Làm cách nào để kiểm tra lượng bộ nhớ tôi đang sử dụng.
  • Có lời khuyên nào để giảm điều đó.
+0

bạn đang lưu trữ loại máy chủ nào? bạn đang sử dụng nhà cung cấp phiên nào? – mlibby

+0

bạn chỉ có một máy chủ hoặc một trang trại máy chủ đang được cân bằng tải? –

+0

@mcl, tôi không nói rõ một nhà cung cấp phiên tôi không nghĩ, vì vậy sẽ sử dụng mặc định, bất kể đó là gì? Xin lỗi tôi không thể cụ thể hơn, nhưng điều này hoàn toàn mới đối với tôi. –

Trả lời

8

Có thể ứng dụng ASP.NET đang được tái chế hoặc tắt máy (ví dụ như do thời gian chờ nhàn rỗi, hoặc hội đồng mới được xây dựng/thay đổi)?

Khi ứng dụng web ASP.NET khởi động, theo mặc định, sẽ tạo khóa mã hóa cho cookie trạng thái xem và phiên. Điều này sẽ làm mất hiệu lực bất kỳ dữ liệu nào như vậy ban đầu được phục vụ từ một lần chạy ứng dụng trước đó (hoặc từ một hệ thống khác).

Để các phiên tồn tại ASP.chu kỳ NET ứng dụng (và các trang trại đa-server), bạn có thể chỉ định các phím trong web.config của bạn:

<system.web> 
    ... 
    <machineKey 
    decryption="AES" 
    validation="SHA1" 
    decryptionKey="..." 
    validationKey="..." 
    /> 

nơi decryptionKeyvalidationKey là chuỗi hex chiều dài tùy thuộc vào các thuật toán (với AES: 64 chữ số và SHA1: 128, cho các thuật toán khác kiểm tra MSDN).

Các phím nên được tạo ra mã hóa, và .NET có các loại để làm điều này mà có thể được sử dụng từ PowerShell:

$rng = New-Object "System.Security.Cryptography.RNGCryptoServiceProvider" 
$bytes = [Array]::CreateInstance([byte], 16) 
$rng.GetBytes($bytes) 
$bytes | ForEach-Object -begin { $s = "" } -process { $s = $s + ("{0:X2}" -f $_) } -end { $s} 

Đối với AES sử dụng độ dài mảng trên, cho SHA1 sử dụng chiều dài 64.

+0

Cảm ơn! Điều này dường như đã thực hiện các trick, ít nhất tôi đã không được đăng xuất trong vài phút cuối, ngay cả khi các trang mất một thời gian để tải (có lẽ là khi tái chế đã xảy ra) –

+0

điều này sẽ giúp các khóa phiên tồn tại , đúng? Nhưng nếu bạn đặt bất kỳ dữ liệu thực tế nào trong Phiên, bạn vẫn cần đảm bảo rằng bạn đang sử dụng nhà cung cấp Phiên với sự kiên trì không ổn định, như SQL hoặc tệp, phải không? – mlibby

+1

@mcl: Đúng. Trong trạng thái phiên quá trình chết với tiến trình. Quá trình được yêu cầu, và điều đó có nghĩa là SQL Server tồn tại khi khởi động lại máy. Tôi thích giả sử trạng thái phiên là tạm thời anyway, bất cứ điều gì cần thiết dài hạn cần phải được trong một kho lưu trữ liên tục với phiên làm bộ đệm. – Richard

1

Rất có khả năng Thời gian chờ của phiên trên máy chủ web được định cấu hình thành một khoảng thời gian nhỏ hơn nhiều so với bạn đã đặt trong cấu hình Xác thực biểu mẫu trong web.config.

Thời gian chờ phiên mặc định là 20 phút cho IIS6 và IIS7.

Nếu bạn có quyền truy cập vào giao diện quản trị web server, bạn có thể tăng thời gian chờ thông qua giao diện đồ họa, nhưng nó cũng có thể được thiết lập từ tập tin cấu hình nếu IIS7 của bạn bằng cách sử dụng <sessionState><sessionPageState> phần:

http://msdn.microsoft.com/en-us/library/cc725820(v=ws.10).aspx

1

Kiểm tra phần xác thực webconfig

<authentication mode="Forms"> 
    <forms name="UniqueName" loginUrl="login.aspx" path="/" > 
    </forms> 
</authentication> 

Đảm bảo rằng tên cookie xác thực cho mỗi trang web tổ chức là duy nhất.

0

Nếu không có cách nào trong số này hoạt động, hãy kiểm tra trong Bể bơi ứng dụng và đảm bảo rằng Thời gian chờ không hoạt động được đặt thành 20+ phút. Nhấp vào hồ bơi ứng dụng, chọn liên kết Advanced Settings ở bên phải, tìm phần Process Model và tăng giá trị Idle Timeout tại đó.

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