论坛首页 移动开发技术论坛

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

浏览 6937 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-31   最后修改:2009-06-15

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头信息,代码如下:

HttpConnection hc = (HttpConnection? )(Connector.open(url)); 

hc.setRequestMethod(method); 

hc.setRequestProperty("cookie",cookies); 

 

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

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;

        

 导读
手机中的重定向问题及处理 http://fonter.iteye.com/blog/400836
J2ME如何通过cmwap直接访问互连网 http://fonter.iteye.com/blog/400868
安装JAD时提示JAD无效原因之一 http://fonter.iteye.com/blog/400888
J2ME网络交互之优化 http://fonter.iteye.com/blog/405137
解决Eclipse无法调试J2ME程序的配置方法 http://fonter.iteye.com/blog/405697

J2ME模拟器加载RMS时突然失效的原因 http://fonter.iteye.com/blog/407576

J2ME飞信协议分析(初稿) http://fonter.iteye.com/blog/408385

   发表时间:2009-06-01  
有一个问题不解,既然很多低端手机不支持cookie功能,那lz的论点4、 J2ME如何设置Cookie与Cookie问题处理 是不是就不能支持那些低端手机了?
0 请登录后投票
   发表时间:2009-06-01  
sharong 写道

有一个问题不解,既然很多低端手机不支持cookie功能,那lz的论点4、 J2ME如何设置Cookie与Cookie问题处理 是不是就不能支持那些低端手机了?

主要是以前手机浏览器不支持COOKIE,网关帮忙保存COOKIE,和J2ME的COOKIE没关系,如果以前手机支持J2ME,那也能支持COOKIE。现在的手机用J2ME软件时如果用到COOKIE时,有时网关也会帮保存COOKIE的。
0 请登录后投票
   发表时间:2009-06-01  
那么也就是j2me的cookie和手机本身支持的cookie不是一回事?
0 请登录后投票
   发表时间:2009-06-01  
sharong 写道

那么也就是j2me的cookie和手机本身支持的cookie不是一回事?

是的
0 请登录后投票
   发表时间:2009-06-08  
wap是没办法存cookie
还好我们公司与移动合作可以拿到手机号!
0 请登录后投票
   发表时间:2009-06-12  
天机老人 写道

wap是没办法存cookie 还好我们公司与移动合作可以拿到手机号!


手机号可用利用飞信的J2ME接口拿。“wap是没办法存cookie”
你可从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;
0 请登录后投票
   发表时间:2009-06-23  
手机号可用利用飞信的J2ME接口拿。


请问如何利用飞信的j2me接口拿手机号啊?
0 请登录后投票
   发表时间:2009-06-23  
avar 写道
手机号可用利用飞信的J2ME接口拿。


请问如何利用飞信的j2me接口拿手机号啊?

先看看 J2ME飞信协议分析(初稿) http://fonter.iteye.com/blog/408385
需请求服务入口为http://liveja.amigo.bjmcc.net/transfer.vurl地址,payload为Amigo_J2ME_C11M20_CMCC_Chuping/1.0.18,编码为utf-8,类型为1,然后返回的响应中从第二个字节到第六个字节就是
0 请登录后投票
   发表时间:2010-03-26  
在WAP网关上 实现永久性COOKIE ,如何实现?
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics