javaweb会话技术深入探讨

什么是会话

用户打开浏览器,访问站点服务器,连续操作(连续的访问站点服务器web资源),直到关闭浏览器,这个整个过程就叫做会话。

会话过程中要解决的问题

每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据。

会话技术的由来

由于HTTP协议无状态的(是指服务器是不知道客户端的状态的,就好比客户1访问服务器,客户2访问服务器,服务器是不知道谁是客户1谁是客户2的。换句话说,客户1上次请求的数据,服务器是不会保存的)由此而引发了会话技术,也就是说,会话技术的出现,就是为了让服务器管理客户端的状态。


会话技术分为两种

cookie

      cookie是客户端技术,当客户端与服务器每进行一次通讯的时候,服务器都会客户端写回一个ID标识,这个标识会以cookie的形式保存至客户端浏览器,当客户端下次再访问服务器的时候,客户端会向服务器发送cookie,会根据cookie中的ID标识去服务器的session池中查找对应的session。

cookie原理



采用cookie作为会话技术(用cookie保存用户状态信息)

如果采用cookie作为会话技术,那么它的工作原理就如上,比如我访问淘宝,第一次请求,买个电视机,服务器经过处理,将"电视机"响应给我的客户端,这时我的客户端浏览器的缓存或者相关的硬盘中保存了"电视机"的信息,当下次我再向淘宝网发送买手机的请求时,同理,服务器会响应给我"手机"的信息,这时我的客户端cookie中保存了"电视机、手机"信息,当我点击结账的时候,会再一次携带着cookie信息访问服务器,服务器获取cookie信息,并对其进行结账处理。



cookie案例



cookieAPI

cookie写回客户端  response.addCookie(cookie)

获取cookie信息,request.getCookies

cookie对象创建new Cookie(name,value)

cookie的name不允许改变--用getName、getValue、setValue但是没有setName

setMaxAge与getMaxAge

setDomain与getDomain

setPath与getPath


通过setMaxAge设置Cookie为持久Cookie

cookie.setMaxAge(60*60*24)设置cookie的时间为1天

访问cookie的有效路径path

默认情况下,生成cookie时,产生默认有效访问路径(默认生成cookie的路径)

例如:

http://localhost/zhangpeng/servlet/path  生成cookie path默认值为/zhangpeng/servlet

http://localhost/zhangpeng/path   生成cookie  path默认值为/zhangpeng

第二次访问程序携带cookie信息,如果访问路径与path不一致,不会携带cookie

shop cookie:path zhangpeng/servlet

buycat cookie:path zhangpeng

访问:http://localhost/zhangpeng/servlet/path  同时满足/zhangpeng/servlet、/zhangpeng携带shop和buycat两个cookie信息

访问:http://localhost/zhangpeng/path  满足/zhangpeng 不满足/zhangpeng/servlet 只携带buycat信息

所以,以后的程序开发,尽量设置cookie的path

什么是会话cookie,什么是持久cookie

cookie信息默认情况下,保存在浏览器内存中的,这个cookie就叫会话cookie

特点:会话cookie在关闭浏览器时清除

cookie信息保存在客户端硬盘上叫持久cookie。

特点:永久保存在本地硬盘上。


删除cookie

会话cookie,关闭浏览器即可删除

持久cookie,必须把setMaxAge设置为0

同时必须设置path,与生成cookie的path一致!

Cookie cookie=new Cookie("zp","zhangpeng");

cookie.setMaxAge(0); //默认path的情况下,不用设置path

这样就会删除"zp"这个cookie


窍门:在javaAPI中所有与时间相关的参数,如果是int类型  单位是秒  long类型  单位是毫秒

cookie案例

商品浏览记录

MX3

MX4

小米3

note3


清空浏览记录

即删除cookie,设置setMaxAge(0) 设置path



session

session是服务端的技术,客户端访问服务器的时候,服务器会保存客户端的状态信息,并向客户端发送一个ID标识,这个客户端的状态信息实际上就是保存在session中,但是这个session是从服务器的session池中获得的,每一个session在session池中都有一个唯一的ID标识,当客户端下次再访问服务器的时候,客户端会向服务器发送这个ID标识,服务器会通过这个ID标识找到相应的session,并从session中获取用户的状态信息。

session的工作原理



cookie与session的区别

cookie信息存在客户端,存在安全问题。session将数据存在服务器端,数据更加安全。

session将信息保存在服务器端,占用服务器资源。cookie不会占用服务器资源。

session共享

实验:用IE6 cookie向session保存一个数据,用另一个IE6读取

用第一个IE6保存session数据时,当前浏览器可以获得。但是第二个IE6无法获取第一个浏览器保存session数据。

IE8以上或火狐浏览器,当打开多个浏览器窗口,它们之间的session却共享。

原因:IE6 中的cookie默认是会话cookie。IE8默认是持久cookie。

问题:如何让多个IE6共享同一个session

解决:将JsessionID持久化。

问题:如果客户端关闭浏览器,是否就删除了session呢?

答案肯定不是,session是保存在服务器端的,IE6造成的假象是因为客户端cookie是会话cookie的缘故。


如果用户禁用了cookie,session该如何使用?

如果禁用了cookie,sessionID将不能缓存至cookie中。解决cookie禁用问题:URL重写。

例如:http://localhost:8080/zp/read;JSESSIONID=tfgddv717272gs7fs77v

有两种方式可完成url重写:

①.response.encodeRedirectURL(url);

②.response.encodeURL(url)  重点用第二个   url=response.encodeURL(url);

sessiob失效:可在web.xml配置session失效时间。

session.setMaxInactiveInterval(60*60);  秒

生命周期:何时创建,何时销毁

cookie生命周期

创建:Cookie cookie=new  Cookie(name,value);   response.addCookie(cookie);

销毁:会话cookie会在浏览器关闭时销毁。持久cookie会在cookie过期(MaxAge)后销毁

session生命周期

创建:request.getSession();

销毁:三种 1.服务器关闭 2.session过期 3.session.invalidate()

session实现一次性验证码

CheckCodeServlet  每次加载登录界面生成验证码,并存入session

LoginServlet登录,获取验证码  判断验证码是否输入正确


servlet三种数据范围

ServletContext

HttpServletRequest

HttpSession





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值