wap怎样做到保持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管理?

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值