2011年12月23日 星期五

Session觀念


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

三種保留狀態的方法
一、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 idbrowser,在Client發出request時,server 會依據client送來的session id來找出它的狀態。
Session的危險性

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

Session
何時結束

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

二、等server上的timeout,也就是說,如果使用者直接關browserserver沒辦法知道這個事件,因些要等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()等等就可以了。

沒有留言: