Cookie和session-java学习记录

Cookie

  1. :因为HTTP协议无状态的协议,不会记录用户上次访问的状态。服务器并不知道,多次请求是同一个浏览器发送的,还是多个不同的用户发送的。
    因此出现了两种会话技术:
    1. 浏览器客户端的技术:Cookie
    2. 服务器端的技术:Session
      3.Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,实际上Cookie是服务器在本地机器上存储的一小段文本,并随着每次请求发送到服务器。
      Cookie技术通过请求和响应报文中写入Cookie信息来控制客户端的状态。
      Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
      每个Cookie只能保存一个键和值,键和值都是字符串类型。不同于Map,一个Map可以保存多个键和值的。如果要保存多个键和值,使用多个Cookie对象。
      每个网站的Cookie都会以一个文本文件的方式放在一个目录下,每个Cookie的大小不超过4K
访问流程
  1. 浏览器第1次访问服务器的时候,浏览器端没有Cookie,由服务器端创建Cookie对象

    2.以一个响应头Set-Cookie: 键=值 的方式发送给浏览器

    1. 浏览器接收到服务器发送回来的Cookie,保存在本地硬盘中。
      4. 下次浏览器再访问服务器的时候,浏览器会将Cookie的信息发送给服务器,以Cookie的请求头发送。
      5. 服务器就可以接收到Cookie的信息
      注:在Tomcat8中cookie值中不能使用分号(?、逗号(,)、等号(=)以及空格,可以直接使用汉字。

关于cookie的一些方法

Cookie类的方法作用
Cookie(String name,String value)通过构造方法创建一个Cookie对象,参数:键,值
addCookie(Cookie cookie)将创建好的Cookie对象发送给浏览器,参数:cookie对象
void setMaxAge(int expiry)设置Cookie过期的时间,单位是秒,负值表示cookie不是持久存储的,当Web浏览器退出时将被删除。零值导致cookie马上被删除。,为正数表示秒。
Cookie[] getCookies()获取浏览器发送回来的所有的Cookie
如果浏览器端没有Cookie信息,得到null
String getName()得到Cookie的键
String getValue()得到Cookie的值
java.net.URLEncode.encode(“字符串”,utf-8)当使用一些特殊字符是,应该使用URl编码
java.net.URLDEcode.Decode(“字符串”,utf-8)使用URl解码

Session

概念:服务器端会话技术

  1. 也是键值对的存储格式,底层是Map结构
  2. 键是String类型,值是Object。
  3. Session是会话对象,也称为会话域。
  4. 数据保存在服务器的内存中
    创建会话的时机:第一次访问,并且由服务器调用了getSession()方法,就会创建一个会话。
    以后每次访问服务器,浏览器会自动带上会话ID(密码条),服务器就可以通过会话ID来识别不同的用户。由Tomcat实现接口,并且实例化对象
访问流程
  1. 浏览器第1次访问,没有会话。
  2. 由服务器getSession()方法创建会话,生成一个会话的ID
  3. 使用Cookie将会话ID发送给浏览器,相当于把密码条给了用户。
  4. 下次再访问,浏览器会读取Cookie中信息,再发送给服务器。把会话id再发送给了服务器。
  5. 服务器得到会话ID,从服务器内存中去找相应的ID,得到用户的会话域。

结论:会话ID是通过Cookie在浏览器与服务器之间进行传输的

HttpServletRequest创建会话的方法描述
HttpSession request.getSession()得到一个会话对象
如果是第一次访问,创建一个新的会话
如果服务器中已经有自己的会话,返回之前已经存在的会话。
会话接口中的方法
HttpSession接口方法作用
String getId()得到会话的ID,每个用户ID是不同的。格式:32位的十六进制数
long getCreationTime()得到会话创建的时间,返回long类型。1970-1-1加上long的值得到的时间
boolean isNew()判断这个会话是否是新的,新的返回true

image.png
修改会话过期时间的三种方式

  • 会话默认存在的时间是30分钟,如果设置为0或负数表示会话不过期。
session中的方法说明
int getMaxInactiveInterval()查看会话过期的时间

时间间隔的含义:在这个时间内,如果没有访问服务器,过期了。如果访问了一次服务器,则重新计时。

一:通过代码

session.setMaxInactiveInterval(10);

二:可以通过web.xml的配置来实现

<!--配置会话过期的时间-->
<session-config>
    <!--单位是分钟-->
    <session-timeout>5</session-timeout>
</session-config>

三:立刻失效

调用一个方法:session.invalidate() 让服务器上的会话马上删除
这个方法通常用在用户退出的代码中

注意:如果代码和xml同时使用,以代码为主,就近原则。代码时间为秒,xml时间单位为分钟。

Session和Cookie的主要区别
  1. Cookie
    1. 一个Cookie只能保存一个键和值
    2. 键和值只能是字符串类型
    3. 保存在浏览器端硬盘中
  2. Session
    1. 一个会话可以保存多个键和值
    2. 会话中键是String,值是Object
    3. 保存在服务器的内存中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值