【词汇详解】Session和Cookie详解

来源:互联网 发布:擂台算法自然语言 编辑:程序博客网 时间:2024/05/27 01:17

昨天 参加某公司二面,第一个问题就是“简单说一下Session和Cookie”,,答的是一塌糊涂,,恶补了一天,整理如下。



一,概念介绍

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.使用session时,服务器会自动给客户端发送一个sessionID,用以标识不同访问回话(没有使用session时,不会有这个标识)【注意】这里发送的sessionID标识就是Cookie
服务端保存Session的方法很多,内存、数据库、文件都有



Session:

Session 是一个抽象概念,将 user(用户),agent(代理) 和 server(服务者) 之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。

Cookie:

Cookie 是一个实际存在的东西,http 协议中定义在 header 中的字段。可以认为是 Session 的一种后端无状态实现(这里的意思是由于session只在服务器端,为何和客户端交互,而实现的)。

Session和Cookie区别:
【1】cookie数据存放在客户的浏览器上,session数据放在服务器上。
【2】cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
【3】session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
【4】单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。



参考链接:
【博客园】cookie 和session 的区别详解
【知乎】COOKIE和SESSION有什么区别?



二,如何查看Cookie

对于不同浏览器可能有不同的查看方式。(看了下Cookie的文件是乱码,可能是为了安全。)


Google Chrome浏览器查看Cookie方式(博主使用 60.0.3112.101(正式版本) (64 位))
浏览器地址栏左侧有个图标,一个圆圈中间写了个”i”。
这里写图片描述

火狐浏览器Mozilla Firefox(54.0.1 (32 位))
这里写图片描述
这里写图片描述



三。通过服务器设置Cookie

服务器端代码片段(博主使用springBoot,灰常方便,servlet处理类似)

        //创建cookie对象保存        Cookie visitTime = new Cookie("visitTime", time);        visitTime.setMaxAge(1000);        Cookie cookie2 = new Cookie("cookie2", time);        cookie2.setMaxAge(1000);//设置cookie属性,存活时间(单位,秒)        //发送cookie        response.addCookie(visitTime);        response.addCookie(cookie2);



通过Chrome浏览器查看结果如下:
这里写图片描述


html请求头及相应头如下:
这里写图片描述



四。更改Cookie或者删除Cookie

更改Cookie和删除Cookie起始是一回事
【注意】:Cookie删除其实是设置生命周期为0,即立刻无效。

 //删除cookie        Cookie[] cookies = request.getCookies();        for (Cookie cookie : cookies) {            //可以进行筛选,对特定名称的cookie进行处理            if (cookie.getName().equals("cookie2")) {                cookie.setMaxAge(20);                response.addCookie(cookie);            } else {                cookie.setMaxAge(0);                response.addCookie(cookie);            }        }

以上代码片段仅供参考,,,感觉有了Cookie好多东西变得更加简单方便。



五。注意细节

(1)Cookie的属性:名字,值,过期时间,路径和域。

【1】路径与域一起构成cookie的作用范围。
【2】若不设置过期时间(默认为-1),则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。
【3】若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个Chrome窗口(不同浏览器貌似无法共享)。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式

这里写图片描述



(2)面试时,讨论了一个问题“如何记录用户登录的时间。”(此处登陆时间指的是从登陆到退出的时间,也可以认为是回话的时间。)

【1】方案1:上面说到Session是用户和服务器的一段“会话”,这段会话有个唯一的sessionID,可以利用这个sessionID,将用户信息存入数据库中,数据库字段:(用户ID,sessionID,登录时间,退出时间,等)。通过sessionID还可以对用户操作,做记录。

【2】事情交给服务器做了,在高并发下,可能影响服务器性能。
针对用户登录的时间,可以使用Cookie。
用户登陆时,将开始时间设置为cookie保存到用户端,,
主动退出时(点退出),可以使用js获取cookie求出时间差,发出请求记录。
关闭浏览器时,可以通过事件,使用js获取cookie求出时间差,发出请求记录。

【3】.。。想到了再贴

原创粉丝点击