cookie和session

cookie和session

1.业务场景

- 登录时要记录账号

- 以后访问查询,增加,修改页面时要显示账号


2.前提条件

- 浏览器和服务器是多对一的关系


3,使用如下对象

###request : 登录,查询是不同的请求,使用不同的request

###config:

    - 假设开发项目时采用多个servlet处理不同的请求

    - 登录有一个servlet,查询有另一个servlet

    - 多个servlet用不同的config

    > 它没有读写变量的能力

###context:

    - Tomcat内只有一个对象

    - 每个人登录时传递的账号都是code="zhangsan"的数据格式

    - 其中key都一样,存入context有冲突


4.正确的做法

    - 使用cookie或session来保存这样的数据


5.它们的区别

    - cookie存储在浏览器上,服务器压力小,但数据不安全

    - session存储在服务器上,服务器压力大,但数据安全

6.如何选择

    - 重要的数据存入session

    - 一般的数据存入cookie


cookie

cookie的生存时间

- 默认的情况下,浏览器会将cookie保存在内存中,只要浏览器不关闭,cookie就一直存在。

- 如果希望关闭浏览器后cookie仍在,可以通过设置过期时间

 void Cookie.setMaxAge(int seconds);   注:seconds单位是秒,精度不是很高

### seconds>0:浏览器要保存cookie的最长时间为设置的参数,如果超过指定的时间,浏览器会删除这个cookie。此时cookie保存在硬盘上。

### seconds = 0:删除cookie。在修改cookie的生存时间为0后,随着response发送回客户端,替换原有cookie,因声明周期到了即将该cookie删除。

### seconds < 0 : 缺省值,浏览器会将cookie保存到内存中。

1.演示

先模拟登陆功能,通过路径传入code参数

cookie和session_第1张图片

接着模拟主页功能,查看是否传递了cookie中的内容

cookie和session_第2张图片

配置好两个页面的xml文件路径

在main路径下创建的cookie,它只对/main及其以下目录有效

cookie和session_第3张图片

在浏览器中模拟数据的时候,输入http://localhost:8080/Jsp01/main/login?code=zhangsan

在本浏览器中可以获得cookie中的数据。

但是一旦换了一个浏览器,则无法获取,证明cookie是保存在浏览器上的。


2.特点

- cookie保存在浏览器上

- 多个请求可以共用一组cookie

- 多个servlet可以共用一组cookie

- 多个用户(浏览器)访问服务器,都会获得一组cookie


3.cookie编码

### cookie只能保存合法的ASCII字符。如果要保存中文,需要将中文转换成合法的ASCII字符,即编码。

4.cookie解码

### 编码后的cookie为了看到实际的中文,需要还原后再显示

cookie和session_第4张图片


5.cookie的路径问题

上面提到了:在main路径下创建的cookie,它只对/main及其以下目录有效


此处会重新定义c1的有效目录路径。但是之前的c1仍然是在/main/login目录下,所以会显示两个相同登录参数


6.cookie的限制

- cookie可以被用户禁止

- cookie会将状态保存在浏览器端,不安全。对于敏感数据,需要加密后再使用cookie来保存

- cookie只能保存少量的数据,大约4kb左右

- cookie的个数是有限制的

- cookie只能保存字符串


########################


session

1.演示

cookie和session_第5张图片

cookie和session_第6张图片

cookie和session_第7张图片

2.特点

- 浏览器第一次访问服务器时,服务器会给它创建1个session

- 服务器会使用cookie将SID返回给浏览器

- 浏览器再次访问服务器时会传入SID

- 多个请求可以共用一个session

- 多个servlet可以共用一个session

- 服务器会给每个浏览器创建一个session



一.session

1.基本用法

  • 获得session: request.getSession()
  • 存数据: session.setAttribute()
  • 取数据: session.getAttribute()
  • 删数据: session.removeAttribute()
  • 销毁: session.invalidate()

2.超时时间

  • 默认是30分钟
  • 可以在配置文件中修改此时间

3.cookie禁用时session怎么办?

  • 解决方案: URL重写

二.cookie和session理解

1.通俗的理解

  • 它们都是暂存数据的对象,特征:
  • 内部的数据可以在多个请求之间共用
  • 内部的数据可以再多个组件之间共用
  • 服务器会给每个浏览器创建一组cookie,一个session

2.专业的理解

  • HTTP协议是一个无状态协议,即服务器默认不会记住浏览器
  • cookie和session就是用来管理这种状态,让服务器记住浏览器的
  • 即:它们都是用来进行状态管理的对象

状态: 用来证明浏览器曾经访问过的证据(数据)



浏览器禁用cookie的后果?

- 如果浏览器禁用cookie,session还能用吗??  答案:不能,但有其他的解决方案!

- 服务器在默认情况下, 会使用cookie的方式将SessionId发送给浏览器,如果用户禁止Cookie,则SessionId不会被浏览器保存,此时,服务器可以使用如UTL重写这样的方式来发送SessionId!

什么是URL重写?

- 浏览器在访问服务器上的某个地址时,不再使用原来的那个地址,而是使用经过改写的地址(即:在原来的地址后面加上了SessionId)

如何实现URL重写?

- 如果是链接地址和表单提交,使用respinse.encodeURL(String url) 生成重写后的URL

- 如果是重定向,使用response.encodeRedirectURL(String url); 生成重写后的URL


你可能感兴趣的:(cookie和session,浏览器,服务器)