Cookie 和 Session

一,Cookie

Cookie是客户端存储数据的一种机制,浏览器中的数据来自服务器,但是在程序运行过程中也是有一些数据需要在浏览器这边存储,并在下次访问时再发给服务器,比如说,上次访问时间,用户身份信息,累计访问次数....这些临时数据都存储在浏览器。

但是为什么不把这些数据存储在本地文件中呢?这是因为浏览器考虑到安全性,禁止网页直接访问你电脑中的文件系统,造成你自身用户数据的泄露。为了保证安全性,又能进行数据存储,所以引入了Cookie(实际上也是按照硬盘文件的方式存储,但是浏览器把操作文件给封装了,网页只能往Cookie中存储键值对,也就是字符串)。

  • Cookie往往是从服务器返回的数据(也可以是网页自己生成的)
  • Cookie存储到浏览器所在的主机的硬盘上,并且按照域名来存储(每一个域名多可以存自己当Cookie,彼此之间互不影响)
  • Cookie是按照键值对(key : value)的形式来组织的,这里的键值对是程序员自定义的,后续再请求这个服务器的时候,就会把 Cookie中内容自动昂带入到请求中,发给服务器,服务器通过 Cookie的内容做一些逻辑上的处理。

二,Session(会话)

Session是服务器存储数据的一种机制,它和cookie一样是使用键值对(sessionId : session)来存储存数据,session通常是与cookie一起使用,举个例子:用户登录

  • 在用户第一次访问服务器时,服务器会根据用户提供的信息生成session(比如 name : 'zhangsan',password : '123456')和 sessionId,然后服务器会把sessionId返回给客户端(浏览器),客户端接收到这个sessionId后,将其保存在cookie中,同时cookie记录此sessionId属于哪个域名。
  • 用户再次访问服务器时,请求会自动判断此域名下是否有cookie信息,如果存在cookie,则将cookie发送给服务器,服务器通过cookie拿到sessionId,然后根据sessionId查询session信息,如果能找到session信息,则可以执行后面的操作,如果没有则说明没有登录或者登录已经失效。

画个图理解一下:

三,Cookie 和 Session 的区别 

  • 存储位置不同:cookie保存在客户端浏览器,session保存在服务器端;

  • 存取方式不同:cookie只能保存ASCII,session能保存任意数据类型;

  • 有效期不同:cookie中的数据可以长时间存在,session中的数据在会话结束或者浏览器关闭时失效;

  • 数据安全性不同:因为cookie是保存在浏览器中的,数据安全性相对较差;session是存储在服务器端的,安全性相对较高;

  • 存储大小不同:cookie一般保存的数据大小不会超过4K;而session理论上来说没有限制;

  • Cookie 和 Session 经常会在一起配合使用. 但是不是必须配合。完全可以用 Cookie 来保存一些数据在客户端. 这些数据不一定是用户身份信息, 也不一定是 sessionId;Session 中的 sessionId 也不需要非得通过 Cookie 传递.

四,使用 Cookie 和 Session 的方法

HttpServletRequest类

方法描述
HttpSession getSession()从服务器中获取会话,参数为 true,则不存在会话时创建新的会话;参数为 false,不存在会话时不创建会话,默认是true
Cookie[]  getCookies()
返回一个数组包含客户端发送该请求的所有的 Cookie 对象,会自动把 Cookie 中的格式解析成键值对.

HttpServletResponse类

方法描述
void addCookie(Cookie cookie)
把指定的 cookie 添加到响应中

HttpSession类

方法描述
Object getAttribute(String name)
该方法返回在该 session 会话中具有指定名称的对象,如果没有
指定名称的对象,则返回 null
void setAttribute(String
name, Object value)
该方法使用指定的名称绑定一个对象到该 session 会话

Cookie类

方法描述
String  getName()
该方法返回 cookie 的名称。名称在创建后不能改变。(这个值是 Set-Cooke 字段设置给浏览器的)
String  getValue()
该方法获取与 cookie 关联的值
void  setValue(String newValue)
该方法设置与 cookie 关联的值
  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶祇秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值