使用frame注意session陷阱

最初發現特定情況下使用frame會導致生成多個session是很久以前的事了,今天突然想起來覺得有必要做個總結,畢竟這種情況還是比較隱蔽的,那麼什麼時候使用frame會產生多個session呢,產生多個session後又會產生什麼樣的麻煩呢?隱蔽在哪裏呢?

1.什麼時候使用frame會產生多個session

不管是frameset還是iframe,只要frame所在文件是htm或html的時候,即靜態網頁時就會產生多個session,至於幾個session和frame的個數是相等的。使用jsp就不會產生多個session。

2.產生多個session後又會產生什麼樣的麻煩呢?

帶來的麻煩是不預期的,比如在其中一個frame中向session中存放了對象,但是在另一個frame中是拿不到這個對象的,因爲不是一個session。

3.隱蔽在哪裏呢?

雖然一次產生了多個session,但是無論那個frame頁面進行刷新都只會使用最後一個session,所以對程序員來說很難發現。

最後,如何來證明上面的事實呢,我寫了一段驗證代碼。

//  left.jsp

sessionId:<%=session.getId()%>

<%session.setAttribute("test","test");%>



//  right.jsp

sessionId:<%=session.getId()%>

attribute:<%=session.getAttribute("test")%>



//  frameset.htm和frameset.jsp相同

<html>

<head>

<title></title>

</head>

<frameset rows="*" cols="400,*" >

    <frame src="left.jsp" />

    <frame src="right.jsp"/>

</frameset>

</html>

//  ifameTest.htm和ifameTest.jsp相同

<html>

<head>

<title></title>

</head>

<body>

<iframe src="left.jsp" height="200" width="300"></iframe>

<iframe src="right.jsp" height="200" width="300"></iframe>

</body>

</html>

 

發佈到tomcat上,分別訪問下面4個文件即可,注意每次測試過一種情況後要重啓瀏覽器。 ifameTest.htm ifameTest.jsp frameset.htm frameset.jsp

注意觀察比較session id 就可以發現問題,非常直觀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章