前言

  session和cookie对于web开发来说,即陌生有熟悉,熟悉是指经常碰到,比如request.getSession(),request.getCookie(),session.setAttribute()等等都能见到,陌生是指从来不知道他们真正是什么,不能说出个所以然来。那其实我在这个问题也是迷茫了非常久了,希望能借这篇随笔来理理。

  由于Http是无状态协议,就是说对事物没有记忆能力,如果后续的操作需要前面的信息(经典的如购物车),则需要重新传入,这回导致每次连接的数据量增大,所以就需要一个能保持http连接的技术,于是session和cookie就出现了。

cookie理解

  先来看cookie,首先明白它的作用:当用户通过http访问服务器时,服务器会将一个k/v值返回给客户端(浏览器),并给这些数据加上一些约束(也就是除了name/value之外的参数),那么返回给浏览器的数据存下来干嘛呢?当然是为了判断下次访问的时候是不是同一个人,如果是同一个人的话,那么就考虑程序中有些设计可以优化一下,就像刚到过你家的人,马上又回来的话,当然和接待新来的客人不一样了。

  那么cookie是怎么工作的呢,在servlet技术中,已经提供了非常好的cookie支持。

  下面是java servlet包里的cookie类源码段,从这里可以看出cookie有哪些属性。

  

  我们可以设置自己的cookie属性,new Cookie(String name, String value)即可,但是要注意不可以和version 0或1里面的保留字段一样,否则抛异常,源码如下:

  

  获取和返回cookie的示例如下:

String getCookie(Cookie[] cookies, String key){if(cookies != null){for(Cookie cookie : cookies){if(cookie.getName().equals(key)){return cookie.getValue();}}} return null;
}@override
public void doGet(HttpServletRequest request, HttpServletResponse response){Cookie[] cookies = request.getCookies();String userName = getCookie(cookies, "username");String userAge = getCookie(cookies, "userAge");if(userName == null){response.addCookie(new Cookies("userName", "larry"));}if(userName == null){response.addCookie(new Cookies("userAge", "24"));}response.getHeaders("Set-Cookie");
}

    

  Cookie有两个缺点:

  1.不安全,cookie从本质上来说,是服务器修改了本地的文件,任何人都不希望自己的电脑的文件在自己不知道情况下被修改,还有就是可以修改cookie的值。

  2.占用宽带,虽然很多浏览器限制了cookie的大小,比如4K左右,但是如果网站的pv量很大,大量访问服务器的连接数据就非常大,非常占用宽带。(虽然cookie和response body一样可以压缩大小)

Session理解

  为了解决上述问题,session就用上了。session将本来存在客户端的信息存在了服务器,然后分配一个id给客户端,这个Id默认叫:JSESSIONID。所以,用户再次访问服务器的时候,只要带上id,服务器就知道是哪个用户来访问了。

  在Tomcat中,由Manager来管理所有session生命周期:

  1.session过期,则由GC回收(tomcat默认设置60s, 当设置为-1的时候,就不会过期,但要慎重考虑内存空间是否足够的问题)

  2.服务器关闭,由Tomcat持久化到磁盘

  在serlvet中,我们直接调用request.getSession(false),也可以得到对象,这是因为jsp默认有一句<%@page HttpSession session = request.getSession(true);%>,所以在jsp编译成servlet的时候,就已经创建好了session对象。当然由于session是占用资源的,所有如果不需要的话,可以在jsp中<%@page session = "false"%>来关闭。

  session自己也有缺点:多台服务器之间不能共享。这里不展开说明。

 

坑爹啊!

  太背了!码这篇随笔花了蛮久的时间,但是就在刚才在提交的时候,没注意自己是FQ状态,就一直卡在哪里提交不了(坑爹啊!为什么博客园墙外提交不了?!),下掉墙之后,页面直接错误,返回一看,打了半天的全没了。气的不行,又不想白白浪费那么久时间,就随便再写了点,凑合看吧,以后一定要注意了!

转载于:https://www.cnblogs.com/yl0822/p/4402084.html

Web Session和Cookie相关推荐

  1. Java Web —— Session 和 cookie 保存登录信息

    session 与 cookie cookie 与 session 应用于互联网中的一项基本技术--会话(客户端与服务端的交互)跟踪技术,用来跟踪用户的整个会话.简单来说,cookie 是通过在客户端 ...

  2. Java Web 之Token+Cookie+Session

    发展史: 1. 早期的WEB基本上就是文档的浏览而已,服务器不需要记录谁在某个时间都浏览了什么文档,每次请求都是全新的HTTP协议. 2. 随着交互式WEB应用的兴起,例如在线购物网站,需要登录的网站 ...

  3. python mssql session_python的web框架webpy【session amp; cookie】五 - 莫激动 - ITeye博客

    webpty中使用session非常简单 import web web.config.debug = False urls = ( "/count", "count&qu ...

  4. Web笔记-session及cookie

    此博文笔记并不全(对于像本人这样开发经验不足的已经够了),只是记录了本人目前对session和cookie的理解,以及在开发时,应该注意些什么. 首先看下两个概念: session:对象存储特定用户会 ...

  5. 【web】session和cookie写登录页面,且免登陆功能和清空功能。

    1.有一个登陆页面login.aspx,默认需要用户输入用户名为admin,密码为123,并且有一个是否记住我的选项. 2.当用户不勾选记住我的时候,只是利用Session来保存登陆状态,并且跳转到i ...

  6. 【读书笔记】深入分析Java Web技术内幕-Cookie与Session

    1. cookie a. cookie的属性项(version1)i. NAME=VALUEii. versioniii. comment--注释项iv. commentURL--服务器为此cooki ...

  7. C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie

    由于种种原因,我们有时需要从互联网上抓取一些资料,有些页面可以直接打开,而有些页面必登录之后才能打开.本文介绍的是使用 HttpWebRequest 和 HttpWebResponse 自动填写提交 ...

  8. session 与 cookie的区别

    session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键.基于网上一些文章和资料的参阅,及作者个人的应用体会,对这 ...

  9. PHP中session和cookie的区别

    这个话题无论是系统运维还是PHP开发人员面试时会经常遇到,所以这里也进行一些总结和归纳,session和cookie的具体理论网上比较大,大家googel下均可:系统运维注意区分下session(会话 ...

最新文章

  1. 用vs2017编写html,vs2017可以编写java
  2. 程序员拯救乐坛?OpenAI用“逆天”GPT2.0搞了个AI音乐生成器
  3. 系统设计面试题思路综述
  4. 百度地图API地理位置和坐标转换
  5. runtest的选项应用
  6. maven中设置代理服务器
  7. 街头人手一件加拿大鹅?店员道出真相:90%都是假货
  8. Linux编程(5)_静态库与动态库
  9. “我的开源项目被大厂‘盗用’了!”
  10. navicat导入成功但是没有数据_数据库能建立成功,但是还报错,应该怎么处理...
  11. 以修改注册表的方式避免ACK确认机制带来的延时现象
  12. Qt5学习笔记之bin文件合成工具三:偏移量数据填充
  13. fortran调用mysql_Fortran过程
  14. 轻松学习Linux之入门篇
  15. 【Python】爬虫入门级实战讲解:爬取商城的商品名称及价格
  16. (C语言)实现基于PHP的某公司自来水收费管理系统
  17. 互联网广告新规实施 微信公众号发“软文”须标明
  18. 和大人和纪晓岚的经典台词
  19. [转]linux grep命令的使用
  20. 未探索的TensorFlow库

热门文章

  1. 运行与windows命令(cmd)的说明与示例
  2. linux实现访问自动挂载
  3. [转]Bootstrap table后端分页(ssm版)
  4. JVM可生成的最大Thread数量探索
  5. 从零开始学_JavaScript_系列(22)——dojo(9)(表单、JsonRest的post方法,widget的使用思路)...
  6. 四、物理优化(4)分区视图
  7. 结合源码讲解Tabost
  8. tensorflow实战学习笔记(1)
  9. 问题 G: 奇数还是偶数? 山东科技大学OJ C语言
  10. chromedriver不在路径的解决办法