博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP无状态协议之Cookie与Session!
阅读量:5021 次
发布时间:2019-06-12

本文共 2209 字,大约阅读时间需要 7 分钟。

在讨论什么是Cookie和Session之前要先了解HTTP的无状态协议。

  因为Cookie与Session是为了解决无状态协议而诞生的。

 

HTTP的无状态协议:

  当客户端向服务器发起请求并且在接收到服务器返回给它的响应后,它就已经完成了一次传输的过程。这个过程是独立的,也是一个新的过程。

  如果客户端下次再发起请求并得到对应的响应,那么下次的过程与这次其实没有任何关联。无论是客户端还是服务端,都不会去记录这个过程。

  而无状态带来的影响就是,当后续的请求需要之前的信息的话,则它必须重新上传,因为服务器不会记住之前你上传的信息是什么。

  这样就会导致每次发起请求的数据量都会非常的大。

 

Cookie: 

  Cookie是一种通过在客户端保存状态的解决方案,Cookie是由服务端生成的,但是以文件的形式保存在客户端。每次客户端向服务端发起请求后,都会带上对应

  Cookie内的信息一并发送到服务端。Cookie的信息不同于请求的内容信息,它不是放在响应体(Response Body)中,而是放在响应头(Response header)中,这样

  客户端通过Cookie向服务端发起请求后,服务端就能解析Cookie来识别该客户端是否在之前就有发起过请求。就能保证客户端和服务端之间的关系持久。

 

  Cookie包含的字段:

    id-Cookie对应的标识

    name-Cookie的名字

    value-Cookie对应的属性值

    domian-域名,表示该Cookie对应哪个IP有效

    path-路径,表示该Cookie对应IP下的哪个路径有效

    expires/Max-Age-表示Cookie到达该时间后就会失效,如果不设置则默认值是Session,意为与Session一起失效(当整个浏览器关闭Cookie失效)

    Set-Cookie: id=123456789; expires=Wed, 25-Apr-2018 06:04:48 GMT; domain = 119.29.100.135 path=/pro/

  

     // cookie的名称          String name = "cookie test";          // cookie的值          String value = "default value";          // 新建cookie实例,cookie的构造函数是new Cookie(name,value)          Cookie cookie = new Cookie(name, value);          // 时间单位为"秒",设置成-1表示关闭浏览器即清除cookie,默认为-1          cookie.setMaxAge(9999);          //设置路径,这个路径即该工程下都可以访问该cookie 如果不设置路径,那么只有设置该cookie路径及其子路径可以访问           cookie.setPath("/");      //由服务器生成Cookie下发给客户端      HttpServletResponse response = response.addCookie(cookie);
// 解析客户端请求头中的Cookie        HttpServletRequest request = null;          // 返回cookie数组          Cookie[] cookies = request.getCookies();          for (Cookie cookie : cookies) {              System.out.println(cookie.getName() + "的值为:" + cookie.getValue());          }                          //删除其实就只将cookie保存时间设置为“0”          cookie.setMaxAge(0);          response.addCookie(cookie);

 

 

Session:

  Session的作用与Cookie大同小异,都是为了保持客户端与服务端之间的联系而存在。

  但是Session是存在服务端的内存中的,当客户端向服务端发起请求的时候,由服务端下发一个Session-id给客户端,客户端通过保存这个id,

  在下次再向服务端发起请求的时候,在请求头中传入该id,来告诉服务端一些对应的身份信息。由于Session的内容是存放在服务端的内存中的

  所有想要清楚Session就不是简单的关闭浏览器能实现的。

  删除Session的方式可以通过对Session设置超时时间,让Session自行销毁。或者服务器重启服务会清空服务内存,也可以做到Session的清除。

 

创建Session的方式

HttpSession session = request.getSession();

 

转载于:https://www.cnblogs.com/culushitai/p/9559352.html

你可能感兴趣的文章
hadoop2.2.0_hbase0.96_zookeeper3.4.5全分布式安装文档下载
查看>>
Flutter 贝塞尔曲线切割
查看>>
golang 的编译安装以及supervisord部署
查看>>
easyui源码翻译1.32--Dialog(对话框窗口)
查看>>
阿里架构师,讲述基于微服务的软件架构模式
查看>>
Eclipse导入maven项目时,Pom.xml文件报错处理方法
查看>>
01、JAVA开发准备
查看>>
asp.net mvc 错误处理 - 自定义报错处理,生成错误日志
查看>>
Linux centos ssh
查看>>
R语言之避免for循环示例
查看>>
[转]jQuery 选择器和dom操作
查看>>
Jenkins+Maven+SVN快速搭建持续集成环境(转)
查看>>
bootstrap 媒体查询
查看>>
杜教筛
查看>>
《Ext JS模板与组件基本知识框架图----模板》
查看>>
txmpp
查看>>
微信开发时调用jssdk,在安卓设备中成功调用;在ios设备中返回错误消息:config fail,无其他具体错误消息,且接口权限显示获取ok,无法调用...
查看>>
【Github教程】史上最全github使用方法:github入门到精通
查看>>
抽象工厂模式(Abstract Factory)
查看>>
luogu1373 小a和uim之大逃离 (dp)
查看>>