J2ME开发中由WAP网关带来的cookie问题

 


J2ME开发中由WAP网关带来的cookie问题 

在之前的产品开发中,遇到一个奇怪的问题,软件在在CMNET下能正常工作,当用了CMWAP时问题出来,后来问题找到了。在CMWAP下,客户端如果带上Cookie,有时会遇到无法正常登录等情况,下面简单介绍其原因及解决办法。 

1、 Cookie是如何工作? 
一般来说,Cookie通过HTTP Headers实现服务器端与客户端的交互。首先,服务器端在响应中利用Set-Cookie header来创建一个Cookie ,然后,客户端在它的请求中通过Cookie header包含这个已经创建的Cookie,并且返回至服务器,从而完成浏览器的论证。 

2、 Cookie的作用 
服务器利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的作用,cookie很好地解决了一些问题,但同时也带来一些问题,如WAP网关对Cookie的处理问题。 

3、 WAP网关存在的问题 
WAP网关存在不少问题,其中之一如开发者最为头疼的问题便是cookie的处理。由于不少低端手机浏览器本身不支持cookie,于是WAP网关越俎代庖担当起此重任--通过网关软件使这些手机支持cookie,此僭越行为导致移动开发者无所适从,具体表现在: 

a. 手机上清除cookie后仍有cookie 
b. cookie会莫名其妙的丢失或者产生 
c. 重复的cookie存在导致生成非法请求Header 
应该还有很多很细小的问题让开发者头疼,在互联网上运行好好的机制移到WAP上就会有这样那样的问题,这些问题更多集中在用户登录、权限控制等方面,问题如何解决呢?解决办法是让WAP网关不保存cookie,下面将讲讲在J2ME中如何解决问题。 

4、 J2ME如何设置Cookie与Cookie问题处理 
J2ME设置Cookie时,通过setRequestProperty 设置Http头信息,代码如下:

Java代码 
  1. HttpConnection hc = (HttpConnection? )(Connector.open(url));   
  2.   
  3. hc.setRequestMethod(method);   
  4.   
  5. hc.setRequestProperty("cookie",cookies);   

 

上面的代码在直接连接互连网时没问题,但在用cmwap连接互连网时却会出现问题,我们以登录为例,有时cookies为空时也能正常登录,通过测试发现WAP网关保存了cookie,为了解决这个问题,我们必须让WAP网关不保存cookie,解决的办法是在HTTP头加上:

Java代码 
  1. hc. setRequestProperty("X-Wap-Proxy-Cookie","none");   

 

通过测试,问题解决了!

 

说明:移动梦网文档:http://www.monternet.com/download/web0323/wapt02.doc 有这样一段描述

2.5.2  COOKIE规范
1. COOKIE一般情况下存放在用户的手机上,若用户手机不支持COOKIE功能,则WAP网关将协助存储用户COOKIE信息;
2. COOKIE可分为永久性COOKIE和暂时性COOKIE,通过手机与WAP网关的配合,两种COOKIE均可实现,可根据业务的需求选择使用;
3. 暂时性COOKIE的保存时间一般是1小时,可根据业务的需要自行指定;
4. 在游戏、社区类业务中,涉及用户身份识别的信息应使用永久性COOKIE;

 

 

你可能感兴趣的:(游戏,应用服务器,互联网,浏览器,WAP)