看完就彻底懂了session和cookie(代码片段)

敲代码的xiaolang 敲代码的xiaolang     2022-12-25     245

关键词:

http 之session和cookie

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。

2.思考一下服务端如何识别特定的客户? 这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

3 .Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。
所以,总结一下:
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式

Cookie: —>常见的应用场景是:自动登录的

Cookie是浏览器保存信息的一种方式,可以理解为一个文件,保存到客户端了啊,服务器可以通过响应浏览器的set-cookie的标头,得到Cookie的信息。你可以给这个文件设置一个期限,这个期限呢,不会因为浏览器的关闭而消失啊。其实大家应该对这个效果不陌生,很多购物网站都是这个做的,即使你没有买东西,他也记住了你的喜好,现在回来,会优先给你提交你喜欢的东西啊,他们也真是煞费苦心了啊。

Cookie的操作:

  • 添加Cookie
  Cookie cookie = new Cookie("user", "suntao");
  cookie.setMaxAge(7*24*60*60);     // 一星期有效
  response.addCookie(cookie);
  • 获取Cookie
  // 因为取得的是整个网页作用域的Cookie的值,所以得到的是个数组
  Cookie[] cookies = request.getCookies();

  for(int i = 0 ; i < cookies.length ; i++)
   String name = cookies[i].getName() ;
    String value = cookies[i].getValue() ;
       

cookie的存活期:默认为-1
会话Cookie:把Cookie保存到浏览器上,当存活期为负数
持久Cookie:把Cookie保存到文件中,当存活期为正数
设置存活期:c.setMaxAge();

HttpSession 会话机制 -->Servlet的会话机制的实现

创建于服务器端,保存于服务器,维护于服务器端,每创建一个新的Session,服务器端都会分配一个唯一的ID,并且把这个ID保存到客户端的Cookie中,保存形式是以JSESSIONID来保存的。

  • |-- 通过HttpServletRequest.getSession 进行获得HttpSession对象,通过setAttribute()给会话赋值,可以通过invalidate()将其失效。

  • |–每一个HttpSession有一个唯一的标识SessionID,只要同一次打开的浏览器通过request获取到session都是同一个。

  • |–WEB容器默认的是用Cookie机制保存SessionID到客户端,并将此Cookie设置为关闭浏览器失效,Cookie名称为:JSESSIONID

  • |–每次请求通过读取Cookie中的SessionID获取相对应的Session会话

  • |–HttpSession的数据保存在服务器端,所以不要保存数据量耗资源很大的数据资源,必要时可以将属性移除或者设置为失效

  • |–HttpSession可以通过setMaxInactiveInterval()设置失效时间(秒)或者在web.xml中配置

 <session-config>

       <!--单位:分钟-->

     <session-timeout>30</session-timeout>

 </session-config>
  • |–HttpSession默认使用Cookie进行保存SessionID,当客户端禁用了Cookie之后,可以通过URL重写的方式进行实现。

  • 可以通过response.encodeURL(url) 进行实现

  • API对encodeURL的结束为,当浏览器支持Cookie时,url不做任何处理;当浏览器不支持Cookie的时候,将会重写URL将SessionID拼接到访问地址后。

作者:清枫_小天
链接:https://www.jianshu.com/p/25802021be63
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

handler面试题全解析,看完表示handler彻底懂了(代码片段)

前言做Android开发的肯定离不开跟Handler打交道,它通常被我们来做主线程与子线程之间的通信工具,而Handler作为Android中消息机制的重要医院也确实给我们的开发带来了极大的便利。可以说只要有异步线程与主线程通信的... 查看详情

从0学习git使用看完就会(代码片段)

Git是一个开源的分布式的版本控制系统,可以有效的高速的处理从小到大的项目管理工具Git是世界上最先进的分布式版本控制工具什么是版本控制工具:就是开发的过成中一个软件的使用技巧,可以确保不同人所编辑... 查看详情

cookie和session基础以及在django中应用(代码片段)

看了会视频,终于搞懂了~1.cookiecookie:保存状态cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”... 查看详情

深度剖析:redis分布式锁到底安全吗?看完这篇文章彻底懂了!

作者| Kaito 来源| 水滴与银弹阅读本文大约需要20 分钟。大家好,我是Kaito。这篇文章我想和你聊一聊,关于Redis分布式锁的「安全性」问题。Redis分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文... 查看详情

深度剖析:redis分布式锁到底安全吗?看完这篇文章彻底懂了!

这篇文章我想和你聊一聊,关于Redis分布式锁的「安全性」问题。Redis分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文章呢?因为我发现网上99%的文章,并没有把这个问题真正讲清楚。导致很多... 查看详情

彻底讲清web开发的cookiesession机制(代码片段)

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份Session通过在服务器端记录信息确定用户身份本文将系统地讲述Cookie与... 查看详情

深度分析:面试90%被问到的sessioncookietoken,看完这篇你就掌握了!(代码片段)

Cookie和SessionHTTP协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session和Cookie的主要目的就是为了弥补HTTP的无状态特性。Session是什么客户端请求服务... 查看详情

用arraylist还是linkedlist?看完你就懂了!(代码片段)

本文旨在为Java开发这择合适的顺序数据结构提供指导。ArrayList和LinkedList是Java集合框架中用来存储对象引用列表的两个类。ArrayList和LinkedList都实现List接口。首先,让我们了解一下它们最重要的父接口——List。1.List接口列表(lis... 查看详情

看完就明白什么是同步/异步阻塞/非阻塞(代码片段)

  相信干IT的或多或少都听说过同步、异步、阻塞、非阻塞这四个词,它们也可以分成两对,也就是同步、异步一对,阻塞、非阻塞一对,这个看词义就很好理解。关键问题在于同步和阻塞、异步和非阻塞之间的区别,很多人... 查看详情

用arraylist还是linkedlist?看完你就懂了!(代码片段)

本文旨在为Java开发这择合适的顺序数据结构提供指导。ArrayList和LinkedList是Java集合框架中用来存储对象引用列表的两个类。ArrayList和LinkedList都实现List接口。首先,让我们了解一下它们最重要的父接口——List。1.List接口列表&... 查看详情

熬夜彻底搞懂cookiesessiontokenjwt(代码片段)

...制将客户端多次请求关联起来。想象一下如果没有cookie、session、token这样的机制,我们在网站上每次点击都需要重新输入密码认证,这样槽糕的体验你还愿意继续用吗?在讲解cookie、session、token前我们先简单讲解两个概念:认证... 查看详情

mysql安装不用愁,看完就能装!(代码片段)

1、下载mysql源安装包wgethttp://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm2、安装mysql源yumlocalinstallmysql57-community-release-el7-8.noarch.rpm3、检查mysql源是否安装成功yumrepolistenabled|grep"mysql 查看详情

mysql安装不用愁,看完就能装(代码片段)

1、下载mysql源安装包wgethttp://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm2、安装mysql源yumlocalinstallmysql57-community-release-el7-8.noarch.rpm3、检查mysql源是否安装成功yumrepolistenabled|grep"mysql 查看详情

django学习之cookie和session(代码片段)

...okie1.获取Cookie2.设置Cookie3.删除Cookie4.Cookie版登陆校验三、Session1.Session的由来2.Session流程解析四、Django中Session操作1.相关方法2.Session版登陆验证4.Django中的Session 查看详情

session/cookie/token还傻傻分不清?(代码片段)

Cookie、Session、Token傻傻分不清 Session/Cookie/Token还傻傻分不清?相信项目中用JWTToken的应该不在少数,但是发现网上很多文章对token的介绍有误,所以对cookie,session,token作了一下对比(文中token指jwttoken)相... 查看详情

关于cookie和session(代码片段)

简单的说Cookie是保存在浏览器的键值对Session是保存在服务端的键值对Session是依赖于Cookie的在Django框架中,我们可以直接操作cookie和session,但是tornado只支持cookie,那如果要使用session怎么办呢?自己定义session基于内存实现SESSION... 查看详情

理解cookie和session机制(代码片段)

...ie的路径Cookie的安全属性JavaScript操作Cookie案例:永久登录Session机制什么是Session实现用户登录Session的生命周期Session的有效期S 查看详情

cookie和session(代码片段)

...原理查看CookieDjango中操作Cookie获取Cookie设置Cookie删除CookieSessionSession的由来Django中Session相关方法Session流程解析Session版登陆验证Django中的Session配置CookieCookie的由来大家都知道HTTP协议是无状态的 查看详情