Session觀念

HTTP是stateless的通訊協定,所以無法保留Client端的State,因而有三種保留Client端state的技巧被提出。

 

三種保留狀態的方法

一、Cookie (RFC2109)

例如

GET /next.jsp HTTP/1.0

cookie:id=12345

二、Hidden form

例如

<Form action = "next.jsp" method="POST">

<input type=hidden name=id value="12345">

</Form>

三、URL Rewriting

GET /next.jsp;id=12345 HTTP/1.0

 

為何要有session觀念

在大量交易的專案中,若要保留Client端的state時,使用上述的方法都會造成網站上的大流量。所以目前大部份的Server都支援session的觀念,也就是為每一個連線編號,在server端記錄session id及該連線的所有狀態資料,只有傳session id給browser,在Client發出request時,server 會依據client送來的session id來找出它的狀態。

Session的危險性


browser如果是同一個process的話,它的session id會一樣。所以假設你的二個視窗都是同一個process,卻用了二個不同的ID在動作,後Login的人會蓋掉之前的,造成session 混亂。


Session何時結束


一、明確呼叫session.invalidate();

二、等server上的timeout,也就是說,如果使用者直接關browser,server沒辦法知道這個事件,因些要等timeout,才能free掉這個session。


三、使用java-script來偵測browser關閉事件的方法。

在browser的<body>標籤中加上Onload=logout()。也就是類似<body onUnload=logout()...>,在最前面的<script></script>中加上一個logout()的function。


參考內容如下


function logout()
{
this.location="logout.jsp";
}


最後在logout.jsp中再加入您要處理的事項。如removeAttribute()、session.invalidate()等等就可以了。



轉自 http://www.try.idv.tw/CourseSite/jsp/course/1-1/session.htm

 

 

文章標籤
全站熱搜
創作者介紹
創作者 totology 的頭像
totology

Mr. 8的單身日記

totology 發表在 痞客邦 留言(0) 人氣(2,151)