Session和Cookie状态管理技术

Session和Cookie状态管理技术

目录  

1,背景

Cookie:HTTP通信协议理解为“无状态”的,而web应用程序使用HTTP通信协议,即服务器一旦响应完客户的请求之后就会断开连接,当下次同一个客户再次请求时需要重新建立连接。

Session:有时候,客户会多次发出请求,服务器需要判断是否为同一个客户发出的请求。

2,概念

把浏览器与服务器之间的多次交互当成一个整体,并且把交互涉及的数据保存下来。交互:请求-响应。数据:状态。管理:多次交互时对数据的修改管理。分为 客户端状态管理技术/服务器状态管理技术。

3,原理

Cookie:浏览器向服务器发送请求,服务器将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器把这些数据保存下来。当浏览器再次访问服务器时候,会把这些数据以cookie消息头的方式发送给服务器。

Session:浏览器访问服务器时,服务器会为每一个浏览器分配空间在服务端内存中,每个都单独创建一个session对象,该对象有一个id属性,其值唯一,称sessionId。并且服务器会这个id发送给浏览器。这是为了当浏览器再次访问服务器时,将id发送给服务器,服务器通过id找到对应session的位置。

4,创建

cookie

Cookie c = new Cookie(String name,String value);

response.addCookie(c);

session

(1) HttpSession s = request.getSession();

(2)HttpSession s = request.getSession(boolean flag);

HttpSession是一个接口,后面返回的是符合规范的对象。当flag为true时,首先查看浏览器请求中有没有sessionid,如果没有,服务器就创建一个对象;如果有,就根据id找到对象后返回,找不到就创建一个新的再返回。当为true时,一定能返回一个session对象。而当flag为false时,没有id或者(有id)但没对象,返回null,找到的话就返回。 

5,查询

cookie

Cookie[ ] request.getCookies();//获取所有的cookie对象

String Cookie.getName();//获取一个对象的名称

String Cookie.getValue();//值

6,绑定session对象

void Session.setAttribute(String name,Object obj);  // 绑定

Object Session.getAttribute(String name);  // 获取

void Session.removeAttribute(String name);  // 移除

Session.invalidate();  // 立即删除

7,修改cookie

获取客户端发送的所有cookie-->根据name找到要修改的cookie-->调用cookie的setValue()方法修改-->将修改后的cookie添加到response发送给客户端

Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie c:cookies){

        String name = c.getName();

        if(name.equals("city")){
            //同名cookie会覆盖
            c.setValue("GuangZhou");
            response.addCookie(c);
}
}
}

8,cookie生存时间

浏览器将cookie保存至内存缓存中,关闭即消失;如果不希望关闭就消失,可以设置过期时间(void Cookie.setMaxAge(int seconds))。

9,session和cookie的区别

(1)session是保存至服务的,客户无法知道其中的信息,安全;cookie保存至浏览器

(2)session保存是对象,cookie保存是字符串

(3)session不区分路径,同一用户同一网站,所有的session都通用;cookie区分路径,同一网站不同路径下的cookie互相访问不到。

(4)cookie约保存4KB数据,session可以保存更多的数据。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值