wap怎樣做到保持session?

qking93415981發表於2020-04-06
 首先搞清楚Session, Cookie, Url重寫這些概念,然後看如何利用Url重寫在Wap開發中維護Session.

什麼是Session, 什麼是Cookie?

Session是由應用伺服器維持的一個伺服器端的儲存空間,使用者在連線伺服器時,會由伺服器生成一個唯一的SessionID,用該SessionID為識別符號來存取伺服器端的Session儲存空間。而SessionID這一資料則是儲存到客戶端,用Cookie儲存的,使用者提交頁面時,會將這一SessionID提交到伺服器端,來存取Session資料。這一過程,是不用開發人員干預的。所以一旦客戶端禁用Cookie,那麼Session也會失效。

Cookie是客戶端的儲存空間,由瀏覽器來維持。

 

什麼是Url重寫?

伺服器也可以通過URL重寫的方式來傳遞SessionID的值,因此不是完全依賴Cookie如果客戶端Cookie禁用,則伺服器可以自動通過重寫URL的方式來儲存Session的值,並且這個過程對程式設計師透明。

可以試一下,即使不寫Cookie,在使用request.getCookies();取出的Cookie陣列的長度也是1,而這個Cookie的名字就是JSESSIONID,還有一個很長的二進位制的字串,是SessionID的值。

    實質上 URL 重寫是通過向 URL 連線新增引數,並把 session ID 作為值包含在連線中。然而,為使這生效,你需要為你的 servlet 響應部分的每個連線新增 session ID.

 

 

知道了Session, Cookie, Url的概念,那麼下面的這個問題就不難回答了:

 

Wap中如何進行Session管理?

WapPC不同之處在與Wap1.x不支援SessionCookie,Wap2.0雖然支援但是隻有協議支援還是不行,還要看手機終端支不支援?所以我們的解決方法就是完全不依賴Wap協議,完全不依賴手機終端,使用Url重寫進行Session的維護,這個方法只與伺服器端有關.

 

利用Url進行Session重寫如何實現?

JSP實現
把 session ID 加到一個連線可以使用一對方法來簡化:response.encodeURL() 使 URL
包含 session ID,如果你需要使用重定向,可以使用 response.encodeRedirectURL ()
來對 URL 進行編碼。
 encodeURL () 及 encodeRedirectedURL () 方法首先判斷 cookies 是否被瀏覽器支援;
如果支援,則引數 URL 被原樣返回,session ID 將通過 cookies 來維持。

程式碼示例:
不使用Url重寫:
<a href=http://wwww.myserver.com/servelet/user;userName=awaysrain>Link</a>

使用Url重寫:
通過HttpServletResponse介面中的encodeURL()方法編碼.
String myURL = response.encodeURL(http://wwww.myserver.com/servelet/user);
<a href= <%=myURL%> _fcksavedurl=" <%=myURL%>" _fcksavedurl=" <%=myURL%>" _fcksavedurl=" <%=myURL%>" >

JSTL實現
<c:url>可以為會話管理重寫 URL
<a href="<c:url value='/content/sitemap.jsp'/>">View sitemap</a>

 

Struts實現:
struts配置檔案中:
設定屬性redirect, contextRelative

<forward name="listArticlesForBlog"
   path="/template/listArticlesForBlog.jsp"
   redirect="true" 
   contextRelative="true"/>

最後一個比較搞的問題:
那麼在瀏覽器允許cookie的情況下,不要求瀏覽器關閉cookie的情況下使用
url重寫如何實現?

http://tomcat.apache.org/tomcat-5.5-doc/config/context.html
Context支援cookies引數。  設定cookies="false",強制只從url解析sessionid。

cookies 
Set to true if you want cookies to be used for session identifierContext
communication if supported by the client (this is the default). Set to
false if you want to disable the use of cookies for session identifier
communication, and rely only on URL rewriting by the application.


對於javaweb專案下的實現實際上是在所有的url parameter前加了';jsessionid=D7A737159B84CB52197FD77577B79DF7'(後面是實際的sessionid)。
eg:
http://domain/i908game.do;jsessionid=D7A737159B84CB52197FD77577B79DF7?p1=v1

相關文章