2008-11-06 61 views
1

有3個網絡應用程序。認證問題或錯誤

網站A和B都是具有FormsAuthentications配置的ASP.NET Web應用程序,並且在網站B中還有一個受保護的文件夾,該文件夾也在web.config中正確配置。 Site C是一個經典的ASP網站,它保持了Session的身份驗證狀態。

現在,請考慮以下步驟:

1,有是有目標的鏈接=「_空白」網站A的網頁,並鏈接到網站B的受保護文件夾屬性;

2,點擊此鏈接,您應該在新的瀏覽器窗口中打開網站B並重定向到登錄頁面;

3,使用您的憑證登錄然後通常重定向到受保護的頁面,現在您可以瀏覽該網站的B頁面當然; 4,現在關閉顯示B站點受保護頁面的瀏覽器窗口,點擊瀏覽器關閉按鈕或按Alt + F4;

5,然後再次單擊網站A上的鏈接,現在您可以在不登錄的情況下訪問網站B的受保護頁面。

6,在站點A的頁面上還有一個target =「_ blank」的鏈接,並鏈接到站點C的受保護頁面,站點C是一個ASP站點;

7,首先打開網站C的受保護頁面,正好需要登錄;

8,登錄站點C,當然可以查看受保護頁面,然後關閉瀏覽器;

9,再次單擊鏈接到網站C,你可以發現自己已經被認證現場C.

哎呀。已經有10個步驟了,我認爲這些都很無聊,但它們真的讓我感到困惑了好幾天。

有人知道這個問題嗎? 非常感謝。

回答

1

ASP和ASP.NET都使用存儲在瀏覽器進程內存中的會話cookie。從鏈接打開一個新的瀏覽器窗口不會啓動一個新的進程,只是打開一個與原始窗口相同的進程擁有的新窗口。

關閉一個窗口不會'註銷'會話,因爲會話cookie將仍然在進程內存中,當另一個窗口訪問該站點時,現有會話cookie將被髮送,因此從站點的角度來看,這是仍然是一樣的sesssion,這是繪製的正確推理。

編輯:這個問題在評論中提出,'如何避免'。最好的答案是:不要避免它,吸收它作爲正常操作,併爲自己節省一桶麻煩。

你所要求的是檢測沒有窗口當前正在顯示特定應用程序的內容的方法。這真的很難達到。即使你在應用程序上只有一個窗口(不能保證),你也必須確保所有頁面都捕獲窗口上的onunload事件,並通知服務器應用程序正在註銷。

如果它的關鍵是用戶必須註銷的應用程序,然後將其最好通過提供一些常見的標題中的每個頁面上的註銷鏈接在本頁面你看現在來達到的能力。

通常爲「登錄」通過存儲某種令牌在會話對象在ASP的會話被標記。構成該應用程序一部分的頁面將檢查該標記,並檢查該標記是否存在重定向至登錄頁面。

要註銷被刪除會話值和重定向到登錄頁面的客戶端。

在ASP.NET中,FormsAuthentication具有SignOut和RedirectToLoginPage方法,Forms Authentication自動處理重定向到登錄頁面。

+0

謝謝,安東尼。 但現在我想避免這個問題。 那我該怎麼辦? 設置cookie超時或其他方法? 非常感謝。 – Shiny 2008-11-06 08:39:24

0

例如,使用session.abandoned on window.close事件。

創建將在報頭和捕捉事件window.close加載功能。 不要忘記驗證前一頁是否來自同一個域/ IP。 因爲你的用戶可以忘記註銷並去其他網站,然後點擊返回按鈕...