jsession的作用

问题:为何出现如下url:http://www.xxx.com/xxx_app;jsessionid=xxxxxxxxxx?a=x&b=x,即jsession以;jsessionid=xxxxxxxxxx的形式出现在url中


1:session的作用

由于http协议是无状态会话协议,无法保存信息,session是为了解决用户在浏览活动中能够保存信息而诞生的。每一个session都会有唯一标识符jsessionid,jsessionid保存在cookie中,每次客户端请求,服务器都能通过保存在cookie中的jsessionid找到对应的session。也就是说session是基于cookie的实现。 ps:储存jsession的cookie与一般的cookie变量不同,jsessionid是保存在内存cookie中的,在一般的cookie文件中是看不到它的影子的。内存cookie在打开一个浏览器窗口的时候会创建,在关闭这个浏览器窗口的时候也同时销毁。这也就解释了为什么session变量不能跨窗口使用,要跨窗口使用就需要手动把jsessionid保存到cookie里面。

2:如果用户禁用了cookie?

当用户禁用了cookie,服务器理所应当的无法获取jsession,也无法获取对应的session,为了解决这问题,我们将使用重写url技术,将jsessionid以;jsessionid=xxxxxxxxxx的形势附加在url上,也就诞生了问题中的情况。 当用户禁用cookie时,整个会话活动过程url都必须携带jsession参数,而我们处理url的时候不得不去解析url,在解析完毕之后再附加上jsession参数返回,显得十分麻烦。故sun提供了以下两种方法,response.encodeurl()和response.encoderedirecturl()

ps:  另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

2.1两种方法的区别

两种方法本质上没有太大的区别。唯一需要注意的是,当使用sendredirect时,由于是产生新的请求,原来的请求会消失,故要使用

response.encoderedirecturl()

3:关于session

3.1:当程序需要使用session时,会先通过jsessionid查找相应的session来使用,如果查找不到,有可能会创建出一个session来使用,如果没有jsessionid,则会新创一个session并且产生对应的jsessionid,在本次响应结束时返还给客户端并且保存在cookie中jsession是一个极其难重复和被仿造的长字符串。

3.2:关于“只要关闭窗口,session就会消失”,服务器是无法感觉窗口是否关闭,只能通过特定时机清楚session(如在用户选择登出时,将session设置为过期)或者当session超过一定时间没有使用则使session过期的方法让消失。

4:cookie储存在哪里

保存jsessionid的cookie是储存在内存中的。那么什么时候是储存在内存中,什么时候是储存在硬盘中呢?

只要设置了过期时间的cookie都是储存在硬盘中,无任何操作的cookie就是储存在内存中


主要参考:http://sxsoft.blog.163.com/blog/static/190412229200911103116773

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值