[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
Web开发
> 详细
关于session的实现:cookie与url重写
时间:
2015-06-23 09:53:06
阅读:
165
评论:
0
收藏:
0
[点我收藏+]
本文讨论的语境是java EE servlet。 我们都知道session的实现主要两种方式:cookie与url重写,而cookie是首选(默认)的方式,因为各种现代浏览器都默认开通cookie功能,但是每种浏览器也都有允许cookie失效的设置。 由于浏览器默认启动cookie功能,而且普通客户一般都不会取消cookie功能。久而久之,我们写代码的时候,也就不会在意session的具体实现,其实这里面还是有很多值得注意的地方,尤其在用户取消cookie功能的情况下。 一 servlet session实现与接口简要介绍: servlet规范规定实现session的cookie名称强制为jsessionid(在servlet 3.0 可以自定义了),在浏览器第一次请求的时候,服务器产生一个唯一的id,并把这个id设置给一个名为jsessionid的cookie,然后再通过reponse的addcookie,输出到浏览器端。其实这些东西我们都可以通过debug模式下的去查看服务器,来验证这些内容;或者用http协议拦截器来查看,因为servlet的所有接口也都是基于http协议的, 下面基于http协议解释一下: 浏览器第一次请求: GET /cxt/index.do HTTP/1.1 ... 由于是第一次请求,所以没有cookie要推给服务器 服务器返回: HTTP/1.1 200 OK Set-Cookie: JSESSIONID=3EF0AEC40F2C6C30A0580844C0E6B2E8; Path=/cxt ...
...
... 由于服务器没发现浏览器没提供任何cookie,服务器不知道是浏览器未提供cookie的原因:可能是cookie功能取消了,也可能是第一次访问。所以服务器生成一个名为jsessionid的cookie,用Set-Cookie来把cookie推给浏览器;并且,服务器的servlet在生成html页面的时候需要用reponse.encodeURL方法来编码url,该方法其实就是用来实现url重写功能的,这是因为浏览器可能是因为取消cookie功能,而未提供cookie的。服务器为了确保下次提交成功,必须确保生成给浏览器端的url带有jsessionid。 若cookie功能没取消,则浏览器浏览器第二次请求: POST /cxt/login.do;jsessionid=3EF0AEC40F2C6C30A0580844C0E6B2E8 HTTP/1.1 Cookie: JSESSIONID=3EF0AEC40F2C6C30A0580844C0E6B2E8; ... 浏览器的下一次请求的时候用http的Cookie属性把当前domain的Cookie都推给服务器,来表明自己的身份。这次,服务器知道浏览器支持cookie功能,servlet不需要再使用reponse.encodeURL来编码url了 若浏览器cookie功能取消,则浏览器请求内容为 POST /cxt/login.do?jsessionid=3EF0AEC40F2C6C30A0580844C0E6B2E8 HTTP/1.1 ... 服务器在接受到上述内容是,通过url后面的jsessionid参数知道这个请求与上一次请求是同一个session 与session有关的类接口: HttpServletRequest.getSession HttpSession HttpServletResponse.encodeURL 二 实现url重写的编码注意点 1.既然浏览器可能被取消cookie功能,那么我们输出给客户端的代码中必须要支持url重写功能,分几种情况解释 假如纯粹用jsp/servlet来写,那么我们必须手动用reponse.encodeURL来编码每一个url,包括
的href,form的action,或者其他href 2.使用其它web框架的话,最好消息使用框架提供的输出href功能,否则会有匪夷所思的结果。 比如用struts,若struts单独提供了一个tag来实现html:rewrite,比如
,在没有jsessionid cookie的情况下,最后会生成http://localhost:8080/ctx/logout.do;jsessionid=0916FB057C169069;若有jsessionid cookie,则会生成http://localhost:8080/ctx/logout.do。但是我们还注意到html:rewrite还有一个href属性,假如我们用href属性的话,则struts不会生成带有jsessionid参数。 struts中提供url重写的功能的还有html:link与html:form,比如
logout
,这个tag功能与html:rewrite相似,也有href属性,生成带有
标签的html内容。
,html:form没有href属性,只有action属性。 3.假若没有使用任何框架,则可以使用jstl提供的url重写功能 jstl提供了标签来实现c:url,比如
,这个也会根据浏览器是否支持cookie,来生成带有jsessionid属性的url。 相信通过上面的总结,是我们对怎么使用session与cookie有更深入的认识。记住,在用jsp/servlet实现系统的时候,尽量不要自己写
标签,最好使用系统框架自带的标签来实现,否则浏览器取消cookie功能的话,系统不支持url重写功能。
关于session的实现:cookie与url重写
原文:http://www.cnblogs.com/a757956132/p/4594667.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!