Cách đặt thời gian chờ phiên trong web.config


179

Tôi đã rất cố gắng nhưng không thể tìm ra giải pháp nào về cách đặt giá trị thời gian chờ phiên cho phiên đang xử lý cho ứng dụng web ASP.Net.

Tôi đang sử dụng VSTS 2008 + .Net 3.5 + C #. Đây là những gì tôi tự viết để đặt thời gian chờ là 1 phút, có đúng không?

Tôi đã viết dưới phần system.web trong phần web.config

<sessionState timeout="1" mode="InProc" />

5
Cách bạn xác định thời gian chờ là chính xác. Bạn có bất kỳ vấn đề với nó?
Darin Dimitrov

7
Bạn có biết rằng điều này có nghĩa là nó sẽ hết hạn sau 1 phút không hoạt động, không phải sau 1 phút kể từ khi bắt đầu? Tôi đoán là nếu bạn đang hỏi câu hỏi này và đã gõ đúng thời gian chờ, bạn có thể hiểu sai về cách thức hoạt động của nó.
Ivan Zlatanov

1
Tôi cần thiết lập thời gian không hoạt động, nó chỉ là những gì tôi cần. Cảm ơn Ivan!
George2

CƯỜI LỚN! Tôi không khuyên bạn nên đặt thời gian chờ chỉ 1 phút. Điều đó sẽ giết chết khả năng sử dụng!
Brian McCarthy

3
Tôi hoàn toàn hiểu sự cần thiết cho một khoảng thời gian chờ ngắn. Trong trường hợp của tôi, nó là để kiểm tra khả năng sử dụng của trang web nếu phiên hết thời gian và cách nó phản ứng sau khi người dùng quay lại. Thật khó để kiểm tra rằng trong khi cũng gỡ lỗi trừ khi thời gian chờ phiên diễn ra nhanh chóng
Brett Weber

Câu trả lời:


323

Nếu bạn muốn đặt thời gian chờ là 20 phút, hãy sử dụng một cái gì đó như thế này:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>

16
20 phút hay giờ? (thời gian chờ = "20")
Muhammad Awais

21
Cấu hình cho biết thời gian chờ tính bằng phút nên 20 phút
Wolfwyrd

50

Giá trị bạn đang đặt trong timeoutthuộc tính là một trong những cách chính xác để đặt giá trị thời gian chờ phiên.

Các timeoutquy định cụ thể thuộc tính số phút một phiên có thể nhàn rỗi trước khi nó bị bỏ hoang. Giá trị mặc định cho thuộc tính này là 20.

Bằng cách chỉ định giá trị 1 cho thuộc tính này, bạn đã đặt phiên bị bỏ trong 1 phút sau khi không hoạt động.

Để kiểm tra điều này, hãy tạo một trang aspx đơn giản và viết mã này trong sự kiện Page_Load,

Response.Write(Session.SessionID);

Mở một trình duyệt và đi đến trang này. Một id phiên sẽ được in. Đợi một phút để vượt qua, sau đó nhấn refresh. Id phiên sẽ thay đổi.

Bây giờ, nếu dự đoán của tôi là chính xác, bạn muốn làm cho người dùng của mình đăng xuất ngay sau khi phiên kết thúc. Để thực hiện việc này, bạn có thể tạo một trang đăng nhập để xác minh thông tin đăng nhập của người dùng và tạo một biến phiên như thế này -

Session["UserId"] = 1;

Bây giờ, bạn sẽ phải thực hiện kiểm tra trên mỗi trang cho biến này như thế này -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

Đây là một ví dụ cơ bản về cách thức này sẽ hoạt động.

Nhưng, để làm cho các ứng dụng an toàn chất lượng sản xuất của bạn, hãy sử dụng các lớp Vai trò & Thành viên do ASP.NET cung cấp. Họ cung cấp xác thực dựa trên Biểu mẫu, đáng tin cậy hơn nhiều so với xác thực dựa trên Phiên thông thường mà bạn đang cố sử dụng.


Lời khuyên tuyệt vời ... Hãy chắc chắn đặt biến Phiên trước tiên trước khi thử nghiệm với Phản hồi.Write (Phiên.SessionID); khôn ngoan khác, nó sẽ làm mới với một ID mới mỗi khi bạn làm mới.
Chris Catignani

1

Nếu bạn đang sử dụng MVC, bạn đặt tệp này vào tệp web.config trong thư mục Root của ứng dụng web, không phải web.config trong thư mục Lượt xem. Nó cũng cần phải VÀO nút system.web, không phải như George2 đã nêu trong câu hỏi của mình: "Tôi đã viết dưới phần system.web trong web.config"

Giá trị tham số thời gian chờ biểu thị phút.

Có các thuộc tính khác có thể được đặt trong phần tử sessionState. Bạn có thể tìm thông tin ở đây: docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

Sau đó, bạn có thể bắt đầu phiên mới trong tệp Global.asax bằng cách thêm phương thức sau:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}

0

Sử dụng cái này trong web.config:

<sessionState 

  timeout="20" 
/>

30
Bạn không cần hầu hết các thuộc tính bạn liệt kê, timeoutthực sự. stateConnectionStringsqlConnectionStringđược bỏ qua khi mode="InProc"và các giá trị cho modecookielessđược đặt thành giá trị mặc định của chúng. Vì vậy, điều này thực sự chắt lọc vào câu trả lời của Wolfwyrd.
Arcain

0

Nếu nó không hoạt động web.config, bạn cần đặt nó từ IIS.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.