HTTP---会话机制Cookie

会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
1.Cookie会话机制
1.1. 是一些数据, 存储于你电脑上的文本文件中(是浏览器储存在用户的机器上的)
1.2.当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息
1.3.Cookie 的作用就是用于解决 “如何记录客户端的用户信息”
(1)当用户访问 web 页面时,他的名字可以记录在 cookie 中
(2)在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录
1.4.当浏览器从服务器上请求 web 页面时, 属于该页面的 cookie 会被添加到该请求中。服务端通过该方式来获取用户的信息
1.5.Cookie 以名/值对形式存储,只能存储 String 类型的对象(例如:username=admin)

1.cookie的类型:按照过期时间分为两类
    (1)会话cookie:是一种临时cookie,用户退出浏览器,会话Cookie就会被删除了
    (2)持久cookie:会储存在硬盘里,保留时间更长,关闭浏览器,重启电脑,它依然存在
2.原理(不安全)
    (1) 客户端请求服务器时,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie 
    (2)客户端浏览器会把Cookie保存起来
    (3)当浏览器再请求服务器时,浏览器把请求的网址连同该Cookie一同提交给服务器
    (4)服务器通过检查该Cookie来获取用户状态
3.cookie的常用属性api
    (1)Cookie cookie = new Cookie("name","admin"); // 新建Cookie
            Cookie cookie = new Cookie("userName", URLEncoder.encode("中文", "UTF-8"));
            URLDecoder.decode(cookies[i].getValue(), "UTF-8")
    在获取cookie中的中文数据时,再使用URLDecoder类里面的decode(String s, String enc)进行解码;
    cookie就是键值对的数据,如果是中文不能直接设置,需要编码
    (2)  cookie.setDomain("www.baidu.com"); // 设置域名
    cookie会被提交到www.baidu.com
    (3)cookie.setPath("/search"); // 设置路径   
    cookie只会被提交到www.baidu.com/search路径下的页面
    (4)  cookie.setMaxAge(60*60*24*7); // 设置有效期
    MaxAge属性单位为秒,默认为-1也就是关闭浏览器自动销毁
    (5) cookie.setMaxAge(0); //将cookie的有效期设置为0,命令浏览器删除该cookie
    (6)response.addCookie(cookie); // 输出到客户端 

1.6.优点和弊端

    (1)优点:极高的扩展性和可用性
          1、数据持久性
          2、不需要任何服务器资源,因为cookie是存储在客户端并发送给服务器读取
          3、可配置到期规则,控制cookie的生命周期,使之不会永远有效,偷盗者可能拿到的是一个过期的cookie
          4、简单性,基于文件的轻量结构
          5、通过良好的编程,控制保存在cookie中的Session对象的大小
          6、通过加密和安全传输技术(ssl),减少cookie被破解的可能性
          7、只要cookie中不存放敏感的数据,即使被盗也不会有重大损失
    (2)缺点:
         1. cookie的数量和长度都有限制
            数量:cookie的数量有限
               IE6及以下的版本最多20个cookie
               IE7以后的可以有50个cookie
               Firefox可以有50个cookie
               chrome和safri没有限制
            长度:每个cookie的长度不超过4k,否则会被截掉
         2.潜在的安全风险:cookie可能被截取篡改,如果cookie被拦截,就可能会获取到所有的Session信息
         3.有些状态不可能保存在客户端,例如,为了防止重复提交表达,需要在服务器端保存一个计时器,如果把这个计时器保存在客户端,它将不起作用。

猜你喜欢

转载自blog.csdn.net/qq591009234/article/details/89452981