因为有不少手机不支持cookie。而sessionid默认是通过cookie来存储和传递的。所以会出现收集不支持session的情况。
首先我们先搞清楚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管理?
Wap与PC不同之处在与Wap1.x不支持Session与Cookie,Wap2.0虽然支持但是只有协议支持还是不行,还要看手机终端支不支持?所以我们的解决方法就是完全不依赖Wap协议,完全不依赖手机终端,使用Url重写进行Session的维护,这个方法只与服务器端有关.
利用Url进行Session重写如何实现?
1 JSP实现
把 session ID 加到一个连接可以使用一对方法来简化:response.encodeURL() 使 URL
包含 session ID,如果你需要使用重定向,可以使用response.encodeRedirectURL () 来对 URL 进行编码。 encodeURL() 及 encodeRedirectedURL () 方法首先判断 cookies 是否被浏览器支持;如果支持,则参数 URL 被原样返回,session ID 将通过 cookies 来维持。
代码示例:
不使用Url重写:
<ahref=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%>" >
2 JSTL实现
<c:url>可以为会话管理重写 URL
<a href="<c:urlvalue='/content/sitemap.jsp'/>">View sitemap</a>
3 Struts实现:
struts配置文件中:
设置属性
redirect,contextRelative<forwardname="listArticlesForBlog"path="/template/listArticlesForBlog.jsp"redirect="true" contextRelative="true"/>