2019独角兽企业重金招聘Python工程师标准>>>

什么是Session?Session什么时候产生?

   Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。

   简单来说,客户端浏览服务端的时候,服务端把客户端信息以某种形式记录在服务器上,这种记录就是Session。所以Session是保存在服务器上的。

为什么要使用Session?什么是SessionID?

因为很多第三方可以获取到这个Cookie,服务器无法判断Cookie是不是真实用户发送的,所以Cookie可以伪造,伪造Cookie实现登录进行一些HTTP请求。

如果从安全性上来讲,Session比Cookie安全性稍微高一些,我们先弄清一点,SessionID是从哪里来的,sessionID是如何使用的:客户端第一次请求Session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,下次请求资源时(Session未过期),浏览器会将sessionID(实质是cookie)放置到请求头中,服务器接收到请求后就得到该请求的SessionID,服务器找到该id的session返还给请求者使用。

一个会话只能有一个session对象,对session来说是只看sessionID。按理来说,只要知道SessionID就可以进行伪登录。但是你想得到这个sessionID,得知道别人什么时候进行登录。同时sessionID是加密的,session过期时sessionID也会失效,想在短时间内功破加了密的sessionID有点难度。

Session的用途

  • Session可以记录用户的登录与行为数据,即记录下用户目前访问服务器上的那些内容,状态是什么,而考虑到这些数据用户修改的随意性很大,并没有必要直接存储在数据库中。

  • 在用户执行刷新操作时,即再次访问服务器时,可以直接根据Session,打开用户上次访问时网页的状态(如用户输入的表单内容等等),为用户带来更优的体验,提供个性化服务。

  • 用户的session信息非常关键,它记录了用户在进入页面、查看结果、点击结果以及后继的操作(比如翻页、加购物车等)。只有通过session信息才能把用户的行为联系起来,构建出完整的模型,因此从海量数据中把每一个用户所有session的操作都完整地挖掘出来非常重要。

session的实现原理

服务器会为每一个访问服务器的用户创建一个session对象,并且把session对象的id保存在本地cookie上,只要用户再次访问服务器时,带着session的id,服务器就会匹配用户在服务器上的session,根据session中的数据,还原用户上次的浏览状态或提供其他人性化服务。

浏览器禁用cookie后如何实现session

如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。

URL地址重写

URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成 “UserProfile/1.aspx”,这样的URL,这样的网址可以更好的被网站所阅读。

如何通过URL地址重写实现session的id传输

URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。

HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

Session的生命周期?

   根据需求设定,一般来说,半小时。

举个例子,你登录一个服务器,服务器返回给你一个sessionID,登录成功之后的半小时之内没有对该服务器进行任何HTTP请求,半小时后你进行一次HTTP请求,会提示你重新登录。这就是我们常说的Session已失效,也就是说就算的session_id还存在,但是session照样会结束自己的生命周期。

Cookie与Session之间有哪些区别或者是优缺点?

知道了Cookie与Session,我们来做一些简单的总结:

   1、Cookie可以存储在浏览器或者本地,session只能存在服务器

   2、session比cookie更具有安全性

   3、因为Session是存储在服务器当中的,所以Session过多,可能会对服务器产生压力。在我看来,Session的生命周期算是减少服务器压力的一种方式。

   4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

转载于:https://my.oschina.net/u/3803405/blog/1930982

Cookie与Session的联系与区别相关推荐

  1. Cookie和Session的作用,区别和各自的应用范围,Session工作原理

    Cookie和Session的作用与区别 Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请 ...

  2. 大数据WEB阶段(十二)会话技术、Cookie、Session及两者的区别

    会话技术 – Cookie与Session及其两者的区别 (一)会话技术 一.概述 1. 一个浏览器为了实现某一个功能对服务器产生了多次请求响应.从第一个请求开始访问服务器,会话开始,到最后一个页面访 ...

  3. Cookie和Session和Token的区别联系

    目录 发展史 2 Cookie 3 Session 3.1 cookie和session的区别 4 Token 4.1 传统方式--基于服务器的验证 4.2 基于服务器验证方式暴露的一些问题 4.3 ...

  4. cookie、session、token的区别和相似点,JWT和数字签名以及签名证书的了解

    cookie.session.token分别是什么?有啥区别呢? 为什么需要cookie.session.token呢? 首先,要思考的是为啥有这三个东西,因为HTTP协议是无状态的特性导致的,什么是 ...

  5. 描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。

    作用: 服务器可以利用Cookies或Session包含信息的任意du性来筛选并经常性维护这些信息,以判断zhi在HTTP传输中的状态.它们dao最典型的应用是判定注册用户是否已经登录网站,用户可能会 ...

  6. 缓存Cookie、session、localStorage的区别

    cookie Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机.当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文 ...

  7. cookie和session的使用和区别

    cookie:存储在浏览器 存值:setcookie("名字",值,过期时间.秒,哪一个文件夹)//文件夹不写一般默认整个网站都可以 setcookie("usernam ...

  8. cookie、session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?

    HTTP是无状态的,也就是说你这次访问了服务器,关闭网页,再次访问服务器,服务器是没有意识到又是你来访问,那怎么保持登录状态呢? 设置让用户可以选择记住用户名和密码,但是把密码交给浏览器,如果电脑被黑 ...

  9. 网络:.cookie和session原理及区别

    一.Cookie详解 (1)简介 因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现.在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料 ...

最新文章

  1. php中使用Curl、socket、file_get_contents三种方法POST提交数据
  2. java 传参字符串数组_JAVA语言之okhttp传递数组参数
  3. js时间搓化为今天明天_打乒乓球的搓球技巧!你掌握了吗?
  4. 巧用 GitHub 创建自己的私人 Maven 仓库,及一些开发Library的建议
  5. 笔记-高项案例题-2016年上-范围管理+沟通管理+进度管理+风险管理
  6. python的回收机制_Python垃圾回收机制【人生苦短,我用python】-阿里云开发者社区...
  7. easyui 收费_收费班长喻玉华三尺岗亭献青春
  8. Java中的深拷贝(深复制)和浅拷贝(浅复制)
  9. 【体系结构】一条SQL语句经历了什么
  10. 第七版自顶向下 第一章中文版 计算机网络课后习题答案
  11. 应用安全系列之二十六:应用层DOS攻击
  12. RGB颜色对照表(数值+英文,Markdown可用)
  13. django 设置媒体url_django-文件上传Media url的配置
  14. Python的正则表达式和re模块
  15. 阿里支付系统就该这么设计(万能通用),稳的一批!
  16. css链接的线,CSS网页技巧:实现超级链接文字上划线和下划线
  17. 国内物联网平台(7):Ablecloud物联网自助开发和大数据云平台
  18. python实现奇异值分解_SVD(奇异值分解)Python实现
  19. Unity 中国区总经理符国新:3D引擎开发
  20. java将汉字转化为拼音

热门文章

  1. leetcode167. 两数之和 II - 输入有序数组
  2. akka一些邮箱的实现
  3. Redis面试常问2-- 从海量数据里查询某一固定前缀的key? SCAN cursor
  4. redis专题:redis集群的动态扩容缩容,水平扩展
  5. 用shiro框架实现注册登陆,让你快速理解shiro用法
  6. 2021开发者最想学的编程语言,Go荣登榜首!
  7. MySQL读锁的区别和应用场景分析
  8. 和宝塔可以同时安装吗_服用钙拮抗剂可以同时补钙吗
  9. springboot+mybatis+mysql+dubbo整合使用
  10. docker cp :用于容器与主机之间的数据拷贝