【词汇详解】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】.。。想到了再贴
- 【词汇详解】Session和Cookie详解
- Cookie和Session详解
- session和cookie详解
- 详解Cookie和Session
- cookie和session详解
- cookie和session详解
- session和cookie详解
- Cookie和Session 详解
- 详解session和cookie
- Cookie和Session详解
- Cookie和Session详解
- Cookie和Session详解
- cookie和session详解
- cookie和session详解
- Session 和Cookie 详解
- Cookie 和 Session 详解
- Session和cookie详解
- cookie和session详解
- 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.
- python获取代理IP
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- AD新建工程
- HDU 3435 A new Graph Game(二分图最优匹配:有向环覆盖)
- 【词汇详解】Session和Cookie详解
- AndroidStudio 布局文件 布局预览
- 判断一个节点是否在一棵二叉树中
- HTML5:Getting to Know HTML5
- linux网络编程中INADDR_ANY的含义
- http请求原理(一)
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- E. Fire in the City Educational Codeforces Round 27 二分+扫描线求面积覆盖+离散化 丧心病狂
- HDU 6166 Senior Pan