当前位置:首页 > 服务端 > java面试题:session和cookie的区别

java面试题:session和cookie的区别

2022年09月17日 08:32:53服务端4

一. 概念理解

当我们每次登陆一个界面的时候,如果意外关闭了这个界面,当我们立即重新打开这个界面的时候,发现我们并不需要重新登录,这是为什么呢?

原来,当我们浏览某个页面的时候,Cookie 会记录我们的一些用户信息。当我们下一次打开相同网址的时候,服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者。

网站,都是利用 Cookie来辨认使用者,以方便送出使用者量身定做的内容。

然而,cookie是什么呢?session又是什么?

先来了解几个概念。

  1. 无状态的HTTP协议:

    1)协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

    2)HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。

  2. 会话(Session)跟踪:

    1)会话,指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。

总的来说,Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

二. Cookie

  1. Cookie是存储在客户端的,一般来说,其位置都是放置在C:\WINDOWS\cookie目录下面,只要打开这个目录就可以看到了。不过,也有些cookie并没有在这个目录下面。这些cookie就只能通过搜索系统 的注册表来查找了。
  2. 当第一次登录到某个站点时,远端服务器就会传过来一个cookie,里面包含一个随机产生的字符序列,称为用户ID,用来唯一标识用户。
  3. 当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

会话Cookie和持久Cookie

  • 会话Cookie:若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。
  • 持久Cookie:若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。这种称为持久Cookie。

三.Session

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录

在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。

两个问题:

1)什么东西可以让你每次请求都把SessionId自动带到服务器呢?

答:显然就是cookie了,如果你想为用户建立一次会话,可以在用户授权成功时给他一个唯一的cookie。当一个用户提交了表单时,浏览器会将用户的SessionId自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,将结果返回给SessionId 所对应的用户。试想,如果没有 SessionId,当有两个用户同时进行注册时,服务器怎样才能知道到底是哪个用户提交了哪个表单呢。

2)如何储存需要的信息?

答:服务器通过SessionId作为key,读写到对应的value,这就达到了保持会话信息的目的。

session的创建:

  • 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了sessionId,
  • 如果已包含则说明以前已经为此客户端创建过session,服务器就按照sessionId把这个session检索出来使用(检索不到,会新建一个)
  • 如果客户端请求不包含sessionId,则为此客户端创建一个session并且生成一个与此session相关联的sessionId,sessionId的值是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionId将被在本次响应中返回给客户端保存。

禁用cookie如何实现session:

如果客户端禁用了cookie,通常有两种方法实现session而不依赖cookie。

1)URL重写,就是把sessionId直接附加在URL路径的后面。

2)表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如:

<form name="testform" action="/xxx"> 
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
<input type="text"> 
</form> 

Session共享:

对于多网站(同一父域不同子域)单服务器,我们需要解决的就是来自不同网站之间SessionId的共享。由于域名不同(aaa.test.com和bbb.test.com),而SessionId又分别储存在各自的cookie中,因此服务器会认为对于两个子站的访问,是来自不同的会话。解决的方法是通过修改cookies的域名为父域名达到cookie共享的目的,从而实现SessionId的共享。带来的弊端就是,子站间的cookie信息也同时被共享了。

四.Cookie和Session的一般作用

  • Cookie与Session一般应于标识用户、权限认证、存储简单数据、还有就是利用P3P实现Cookie跨域单点登录
  • 但是由于session的存在,会占用服务器的内存,所以要根据具体情境使用

作者:我是方小磊
来源链接:https://blog.csdn.net/weixin_44844089/article/details/115708793

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42448.html

标签: CookieSession
分享给朋友:

“java面试题:session和cookie的区别” 的相关文章

JSP中response,session,cookie,application的作用及区别

JSP中response,session,cookie,application的作用及区别

目录 1.response :响应对象 2.session(服务端) 3.使用Cookie实现 记住用户名 功能 4.session :会话 5...

Error creating bean with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' defined in class path resource [applicationContext-common.xml]: Cannot resolve reference to bean 'sqlSessionFactory'

Error creating bean with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0' defined in class path resource [applicationContext-common.xml]: Cannot resolve reference to bean 'sqlSessionFactory'

2019-5-24 9:30:07 org.apache.catalina.core.AprLifecycleListener init 信息: Loaded APR based Apache Tomcat Native library 1.1.20. 2019-5-24 9...

Error creating bean with name 'scopedTarget.oauth2ClientContext': Scope 'session' is not active for the current thread;

引用:https://stackoverflow.com/questions/50405838/error-creating-bean-with-name-scopedtarget-oauth2clientcontext-scope-session 我解决的方式就是使用他拉问题中...

【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署

【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署

前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作 但是分布式部署的时候,我们请求的服务器可能不是同一台服务器,那么我们就必须要...

启动项目报错:Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext.xml]:Invocation of init method failed

1.Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext.xml]:Invocation of init method failed...

萨克斯,音符的悠扬(Session管理)

萨克斯,音符的悠扬(Session管理)

一.前言   小朽不才,最近喜欢上了萨克斯,一年计划[传送门]中的实行。就伴随着一首萨克斯,整理了下Session管理和Session四种技术。   保存状态:        #网址重写(URL rewriting)        #隐藏域...

浅谈Cookie和Session的初步理解

浅谈Cookie和Session的初步理解 前言        HTTP是无状态的协议,客户每次读取web页面时,服务器都打开新的连接,而且服务器也不会自动维护客户的上下文...

HTTP协议-Cookie和Session详解

HTTP协议-Cookie和Session详解

前言: 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的跟踪技术就是Cookie和Session。 Cookie通过在客户端记录信息确定用户身份,Session通过在服务器记录确定用户身份。 本章将系统的讲述Cookie和Sessio...

Cookie和Session的区别与联系

Cookie和Session的区别与联系

Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Sessio...

Cookie、Session和Token认证

Cookie、Session和Token认证

目录 Cookie Session认证机制 Session的一些安全配置 Token认证机制 Token预防CSRF Session认证和Token认证的区别 前言:HTTP是一种无状态的协议,为了分辨链接是谁发起的,需...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。