问题:
开发WAP页面的时候,用WAP模拟器测试,每步操作对应的session的ID好都是一个,但系统拿到真正的环境中运行时,发现每步操作对应的session的ID好都不同。具体什么怎会呢?
解答:
session可通过两种方式在通信过程中保存:
1.sessionid 存放在cookie中
2. sessionid 放在url中,格式如下:http://ip:port;jsessionID=XXXXXXX/appname...(具体是jsessionid)
由于有的手机不能存放cookie,而你在页面中又没有encode各个链接的url,即没有加jsessionid,所以导致session丢失。
具体来讲:
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。
保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于 SEEESIONID,而。比如weblogic对于web应用程序生成的cookie,JSESSIONID= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是 JSESSIONID。
由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://...../xxx; jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。
另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如下面的表单
<form name="testform" action="/xxx"><input type="text"></form>
在被传递给客户端之前将被改写成
<form name="testform" action="/xxx"><input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"><input type="text"></form>
实际上这种技术可以简单的用对action应用URL重写来代替。
在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个 session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的 HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。
恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
分享到:
相关推荐
WAP Push消息通常采用SIMPLE (Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions) 或者 WSP (WAP Session Protocol) 协议来传输。当手机接收到Push消息后,会根据消息内容解析...
在实际应用中,还可以设置session或cookie来保存用户状态,以便在多个页面间保持登录状态。 总的来说,这个Wap版登录验证Demo展示了如何结合JqueryMobile和PHP来创建一个完整的登录系统,包括前端交互、后端验证...
Session对象则用来保存用户会话期间的数据;Application对象则在所有用户间共享数据。 3. **服务器端组件**:ASP还支持各种服务器端组件,如ADODB(ActiveX Data Objects)用于数据库操作,XMLHTTP组件用于异步HTTP...
在本案例中,“ASP源码—手机39健康网wap爬虫.zip”提供的是一套使用ASP编写的爬虫程序,用于抓取手机39健康网(wap版)上的信息。 【网页爬虫基础】 网页爬虫,也称为网络蜘蛛或网络机器人,是一种自动化程序,...
同时,系统需要对用户的上传和下载行为进行权限控制,防止非法操作,这可能涉及到session管理和角色权限验证。 五、安全与优化 考虑到网络安全,项目可能采用了HTTPS协议来加密传输数据,保护用户隐私。另外,通过...
在ASP源码中,开发者通常会利用内置的对象如Request(获取客户端数据)、Response(向客户端发送数据)和Session(处理用户会话)来实现网页的功能。 该系统的功能可能包括以下方面: 1. **企业信息管理**:管理员...
在该实例中,"开心网址"可能是一个网址收藏或分享的平台,用户可以在这里保存、管理和分享他们的常用网址。源码中可能会包括用户注册、登录、添加、删除和查看网址的功能。HTML生成部分意味着服务器端的ASP脚本会...
- `Session`对象用于保存用户会话期间的数据,每个用户都有独立的会话空间。 - `Application`对象则是在所有用户间共享数据,通常用于存储全局变量。 3. **服务器端包含**:ASP支持使用`...
服务器响应中的`jsessionid`被解析并保存在`session`变量中,同时,响应中的`t`参数也被提取并保存。 2. **获取好友ID**:`getToUserid`方法通过向`SEARCH`URL发送带有手机号码的请求来获取对应的好友ID。这一功能...
6. **session和cookie管理**:ASP提供了session和cookie机制来跟踪用户状态,例如,保存用户的偏好设置或导航历史。 7. **错误处理与日志记录**:为了确保系统的稳定性和可维护性,良好的错误处理和日志记录机制是...
* Discuz的基本信息,如用户信息,Session信息存在如下变量中:$_DCACHE,$_COOKIE,$_DCOOKIEd,$_DSESSION,$_DPLUGIN * 可以通过print_r($GLOBALS),打印全部变量 Discuz缓存处理机制详解: * 缓存数据的存放目录,...
Attachments存储用户上传的附件,Customavatars保存用户自定义头像,Forumdata存储缓存数据,Images存放模板图片,Include包含常用函数库,Ipdata记录IP来源,Plugins存储插件信息,Templates存储模板文件,而Wap则...
- **WAP(Wireless Application Protocol)**: 是一种为无线设备提供互联网访问的标准协议栈,包括WSP(Wireless Session Protocol)用于承载HTTP/HTTPS协议。 - **WTP(Wireless Transaction Protocol)**: WAP协议...
- 每次表单提交时,检查用户会话(Session)中是否有保存上次提交的时间。 - 如果有,并且距离上次提交的时间在设定的阈值之内(比如一分钟),则说明用户在规定的时间内重复提交了表单,这时可以返回一个错误信息...
29、修复了后台操作中如果 session 过期重新登陆后出现循环跳转 30、修复了恶意访问后台权限判断,个人签名过滤恶意html代码的问题 31、修复了全文检索不精确 32、修复了如果域名中多一个"/"符,后台表情搜索失效...
29、修复了后台操作中如果 session 过期重新登陆后出现循环跳转 30、修复了恶意访问后台权限判断,个人签名过滤恶意html代码的问题 31、修复了全文检索不精确 32、修复了如果域名中多一个"/"符,后台表情搜索失效...
J2ME的CommAPI提供了串口和蓝牙通信的能力,而WMA(Wireless Messaging API)和WSP(Wireless Session Protocol)则用于实现无线数据交换,如HTTP和WAP协议的访问。 八、多媒体与游戏开发 J2ME支持多媒体功能,如...
8. **无线特性**:J2ME的WMA和WSP(Wireless Session Protocol)可以实现无线消息传递和WAP浏览。 9. **优化技巧**:由于资源有限,J2ME应用需要进行性能优化,如减少内存占用、避免不必要的对象创建、优化代码结构...
**WAP-WSP 无线应用协议-无线会话协议(Wireless Application Protocol - Wireless Session Protocol)**:支持分析WAP和WSP协议。 **BOOTP-DHCP 引导协议-动态主机配置协议(Bootstrap Protocol - Dynamic Host ...