2010-08-19 32 views
8

Giả sử tôi đã đăng nhập vào một ứng dụng đang chạy từ IIS. Bây giờ tôi chưa đăng xuất, nhưng đã đóng trình duyệt. Và khi tôi truy cập lại vào ứng dụng, nó mặc định là trang đăng nhập. Làm thế nào để IIS nhận ra rằng đó là một yêu cầu mới và chuyển hướng người dùng đến trang đăng nhập?IIS nhận ra các phiên khác nhau trong .NET như thế nào?

Tôi có một câu hỏi khác. Giả sử nếu tôi không đóng trình duyệt mà tôi đã sử dụng khi đăng nhập. Tôi đang mở trình duyệt mới để yêu cầu một trang từ cùng một ứng dụng. IIS nhận ra rằng đó là một yêu cầu mới cho ứng dụng và chuyển hướng người dùng đến trang đăng nhập. Tại sao nó không sử dụng phiên hoặc cookie hiện tại mà trình duyệt đầu tiên sử dụng?

Vui lòng không bị kích thích các câu hỏi liên tục của tôi ... Tôi đang gặp phải sự nhầm lẫn rất lớn. Chúng tôi nói HTTP là giao thức không quốc tịch. Khi trang được yêu cầu tôi đã đăng nhập. Và kết nối giao thức HTTP sẽ bị chấm dứt giữa IIS và trình duyệt, phải không? Sau đó, tôi đang điều hướng đến các trang khác trong ứng dụng đã đăng nhập đó. Bây giờ IIS nhận ra người dùng đã đăng nhập trên trình duyệt này. Nhưng khi tôi mở một trình duyệt mới và yêu cầu ứng dụng đó, làm thế nào để IIS nhận ra nó là một yêu cầu mới? Vì giao thức HTTP bị ngắt kết nối, nó hoạt động như thế nào trong trường hợp đầu tiên?

+0

Ok. Ngoài ra tôi có một nghi ngờ khác. Giả sử nếu iam không đóng trình duyệt mà tôi đã đăng nhập. Và tôi đang mở trình duyệt mới để yêu cầu trang từ cùng một ứng dụng. Bây giờ làm thế nào iis nhận ra rằng đó là yêu cầu mới cho ứng dụng và gửi đến trang đăng nhập. Tại sao nó không thể sử dụng phiên hoặc cookie hiện tại mà trình duyệt đầu tiên sử dụng – Bala

+0

Xem câu trả lời cập nhật của tôi. – cHao

+0

Cảm ơn rất nhiều chao. Hãy tìm câu hỏi được cập nhật của tôi và giúp tôi – Bala

Trả lời

29

Như bạn đã nói một cách chính xác, HTTP bản thân là quốc tịch, và từng yêu cầu riêng biệt về mặt kỹ thuật từ mỗi khác. Phiên, như được sử dụng bởi các trang web, là một cách giải quyết cho điều đó. Điều gì xảy ra, thông thường, là máy chủ lưu trữ mọi thông tin mà nó quan tâm để duy trì giữa các yêu cầu (ví dụ như tên người dùng và/hoặc ID của người dùng đã đăng nhập) và gán thông tin đó cho ID (được gọi là "ID phiên"). Sau đó nó sẽ cho trình duyệt biết ID phiên, theo cách mà trình duyệt có thể trao lại ID khi đến lúc thực hiện một yêu cầu khác. Nếu trình duyệt đóng vai trò của nó và cung cấp ID phiên, thì thông tin được lưu trữ có thể được truy xuất, cập nhật, v.v ... với mỗi yêu cầu, cung cấp một số mức trạng thái ngay cả trên giao thức không trạng thái.

Phiên thường được triển khai bằng cookie. Tức là, máy chủ sẽ đưa cho trình duyệt một cookie có ID phiên và trình duyệt sẽ trao lại cùng một cookie đó với mỗi yêu cầu cho đến khi cookie hết hạn hoặc bị lãng quên. Một số cookie (cái gọi là "cookie phiên") không được lưu và bị lãng quên khi trình duyệt bị đóng. Một trình duyệt mới mở không có bất kỳ cookie phiên nào để vượt qua, vì vậy nếu máy chủ sử dụng cookie phiên để thực hiện các phiên (mà nó nên), nó sẽ xem xét người dùng chưa đăng nhập và trả lại trang đăng nhập nếu họ cần được đăng nhập.

Cookie phiên thường được chia sẻ giữa các tab trong cùng một trình duyệt và đôi khi thậm chí được chia sẻ bởi các cửa sổ được mở bởi "Tệp> Cửa sổ mới" từ trình duyệt đang chạy, vì cả hai trường hợp đó thường sẽ chỉ là một phần của trình duyệt đó. Nhưng nếu bạn khởi động trình duyệt từ menu Start, hoặc tuy nhiên hệ điều hành của bạn cho phép bạn bắt đầu một chương trình, đó là toàn bộ quá trình khác - và các cookie phiên hiếm khi được chia sẻ giữa các quá trình.

Máy chủ cũng thường chỉ nhớ các phiên ở cuối của nó trong một thời gian giới hạn (bất cứ nơi nào từ vài giây đến nhiều năm, tùy thuộc vào cài đặt máy chủ và/hoặc trang web) sau mỗi yêu cầu sử dụng phiên. Nếu trình duyệt chuyển một cookie tương ứng với phiên mà máy chủ không còn nhớ, nó sẽ hoạt động như thể không có phiên nào cả. Trong trường hợp bạn phải đăng nhập, một lần nữa sẽ bị trả lại trang đăng nhập.

+0

Cảm ơn rất nhiều vì đã giúp tôi hỗn loạn – Bala

1

Có cookie luôn được chuyển cho dù bạn có đăng nhập hay không. Chúng được ánh xạ tới phiên trong IIS.

+0

Tôi đồng ý, nhưng làm thế nào IIS biết rằng trình duyệt được đóng lại và nó là một yêu cầu mới khi chúng tôi yêu cầu trang đó một lần nữa – Bala

+3

@Bala: IIS không biết về một trình duyệt. Đó là trình duyệt đã quên cookie phiên tạm thời khi nó đóng (vì nó nên làm) và do đó không thể gửi nó đến IIS từ cá thể mới. không có cookie = không có phiên. –

+0

Cảm ơn rất nhiều Hans – Bala

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