会话Session和Cookie
程序员文章站
2024-03-20 14:28:34
...
- 示例项目功能
- 注册功能:
- 注册页面1填写信息 (填完点击下一步按钮,表单提交到servlet1页面 填写信息通过request.set存储,再返回页面2)
- 页面2 填写信息,到servlet2再获取页面2信息及servlet1存储的信息
- 最终结果:只能输出页面2的信息,servlet1保存的信息获取不到
- 结论 : request数据不能共享,一次请求返回响应即结束
- 注册功能:
- Cookie
http协议中,服务器发送给浏览器客户端的数据(键值对),然后浏览器会把Cookie保存起来,下一次访问服务器时把Cookie再发给服务器。Cookie代表一个会话之间的数据共享;Cookie数据大小也有限制(单个4K),不同的浏览器之间Cookie不可以共享;
生命周期 : 默认为本次会话,即关闭浏览器就消失
// 手动设置生命周期 [expiry表示以秒为单位的数值]
// expiry : -1 (默认情况,和没设置相同)
// expiry : 0 (销毁当前Cookie)
Cookie.setMaxAge(int expiry)
// 示例保存1小时,即使关闭浏览器也会保存
Cookie.setMaxAge(60 * 60)
-
Cookie路径 浏览器保存Cookie之后每次访问请求都会携带Cooke,当然不是携带浏览器所有Cookie.而是会根据浏览器的Cookie路径(path,此处路径绝不指客户端保存路径),访问网址短于路径则会加载到request请求中;例如:
- // 示例本地Cookie保存路径为 /cookie_demo/servlet
- 请求可以为 http://localhost:8080/cookie_demo 即满足条件会携带
- // 可以通过Cookie#setPath(String)设置,不手动设置会按照默认请求生成路径;例如 : 请求http://localhost:8080/day07_03/Aservlet,服务器响应了cookie,那么默认路径就是 /day07_03/
- 可以通过 httpWatch查看响应中是否存在该路径
-
Cookie中文存取
- 存储 : 通过URLEncoder(String)
- 取值 : 通过URLDecoder(String)
- Cookie的禁用处理 存储之后,再获取一下,如果能获取到则说明没禁用,如果显示为null则说明被禁用。输出到浏览器提示用户手动开启cookie .
- Session(http请求会话) 相比较于cookie它周期比较短,关闭浏览器即消失;
- Session使用
- 使用session默认会创建cookie(名字叫JsessionI)用来和服务器端session绑定,并且周期为一个会话内;
- 不同的浏览器创建不同的会话,服务器端通过sessionId和浏览器端cookie保存的SessionId进行区分会话
- Session失效详解
- 注销session方法 - session.invalidate()
- session超时
- web.xml中配置
<session-config> <!-- 设置session超时时间,单位为分钟 --> <session-timeout>1</session-timeout> </session-config>
- session是依赖cookie存在的,如果cookie被禁用,那么直接判断session是否为空就可以知道是否被禁用。
转载于:https://my.oschina.net/yolks/blog/1799574