session在计算机中,尤其是在网络应用中,称为“会话控制”。session 对象存储特定用户会话所需的属性及配置信息。session跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是cookie与session。Cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份。今天这篇博文,小编主要简单的介绍一下session和cookie,还请各位大神多多指教。

session的基本原理
小伙伴们都知道cookie是存在客户端的,session是存到服务端的,如果存到session整个空间里,只要这个用户没有关闭浏览器,都能从服务器上取得设置的值,如果重新启动浏览器就没有了,seesion是一个会话,一个会话可以看作是一个人,那么她就和这个人进行了绑定,对应这个浏览器,所以人和浏览器就进行了绑定,如下图:

结合上面的图形,小编来详细的介绍一下,假如张三是一个人,且张三是一个客户端,张三要访问我们的服务器(目前我们使用的服务器是tomcat),当张三来访问的时候,我们在tomcat上开辟一个资源或者说开辟一个空间给张三,更准确的说,就是分配一块内存给张三,ok,这个时候,张三就可以进行访问了,张三可以向内存里面存入资源,只要浏览器没有进行关闭的操作,这里面的资源张三可以随时进行存的操作,不管访问了多少页面,只要以前存放在这个浏览器里面的资源,张三都可以拿出来,但是如果进行了关闭浏览器的操作,那么这个里面的东西张三就拿不出来了,再次打开浏览器,用张三进行登录,也是取不出来的,所以这块的内容占着内存。那么如果这个时候李四来了,李四也开辟了一个空间,李四把浏览器关闭了,同样的,李四这块也占用了一定的内存,讲解到这里,小编相信,小伙伴们都能理解了,seesion实在服务端的,在tomcat上,cookie是在客户端的,我们在深入一点研究,http这个协议,小伙伴都有所了解,比如我们平常使用的通讯工具QQ,她可以检测到对方在不在线,比如张三发了一个消息给李四,李四回复了张三的消息,那么问题来了,张三是如何找到李四的呢?张三肯定要知道李四的地址,这样张三和李四才能相互找到对方,而http协议又是怎么回事呢?还是上面的例子来说,假设张三去访问,访问tomcat,tomcat为其开辟了一个空间,之后response进行返回,那下一次访问的时候,张三如何知道他需要找的地方呢?而不是找其他的地方呢?因为这里面有很多的空间,假设有一万个用户,就有一万份内存的分配,怎么样才能知道访问的地方是分配给张三的那块内存呢?是否可以用张三进行标记一下?如果有重复的呢?我们又该怎么办?所以http协议是没有状态的,她不会一直处于连接的状态,如果一直处于连接的状态,张三肯定能找到分配给自己的那块内存,这个request过来,再response过去,就断了,她连接完之后,马上就断,也就是谁都不知道谁的存在了,不像QQ,如果一方下线了,另一方马上知道对方已经不在线了,所以http是无状态的,现在谁都不认识谁了,下次如果再想找这块资源,就找不到,那么我们该怎么办呢?且听小编慢慢道来:

假设张三来进行访问的操作,服务器上为张三分配了一个空间,这个空间属于张三,整个会话都可以用到,所以她叫做session,如果把浏览器关闭,再次启动进行访问的时候,那么就是另外一个会话了,不是这一次的了,当张三来访问的时候,就会创建一个seesionid,所有会有一个标识,这个seesionid是不重复的,创建完编号,做完相关的操作之后,response返回,会把编号也一同带回去,假如这个时候,李四来了,也会为李四创建一个id,访问完成之后,同样会把编号带回去,如下图所示:


所以session有一个超时的概念,如果没有访问,就会被释放。在cookie里面保存了session的id。cookie是可以禁用的,如果浏览器不让我们写cookie了,那怎么办呢,seesion也找不到了,如何解决了,这个时候,我们采用URL重写的方式,什么叫url重写呢?URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成 “UserProfile/1.aspx”,这样的URL,这样的网址可以更好的被网站所阅读。如果浏览器不支持Cookie或用户阻止了所有Cookie,可以把会话ID附加在HTML页面中所有的URL上,这些页面作为响应发送给客户。这样,当用户单击URL时,会话ID被自动作为请求行的一部分而不是作为头行发送回服务器。这种方法称为URL重写(URL rewriting)。
URL重写
URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成 “UserProfile/1.aspx”,这样的URL,这样的网址可以更好的被网站所阅读。
如果浏览器不支持Cookie或用户阻止了所有Cookie,可以把会话ID附加在HTML页面中所有的URL上,这些页面作为响应发送给客户。这样,当用户单击URL时,会话ID被自动作为请求行的一部分而不是作为头行发送回服务器。这种方法称为URL重写(URL rewriting)。
一般来说,URL重写是支持会话的非常健壮的方法。在不能确定浏览器是否支持Cookie的情况下应该使用这种方法。然而,使用URL重写应该注意下面几点:
1.如果使用URL重写,应该在应用程序的所有页面中,对所有的URL编码,包括所有的超链接和表单的action属性值。
2.应用程序的所有的页面都应该是动态的。因为不同的用户具有不同的会话ID,因此在静态HTML页面中无法在URL上附加会话ID。
3.所有静态的HTML页面必须通过Servlet运行,在它将页面发送给客户时会重写URL。
url重写有什么缺点呢?对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL。每个引用你的站点的URL,以及那些返回给用户的URL(即使通过间接手段,比如服务器重定向中的Location字段)都要添加额外的信息。这意味着在你的站点上不能有任何静态的HTML页面(至少静态页面中不能有任何链接到站点动态页面的链接)。因此,每个页面都必须使用servlet或JSP动态生成。即使所有的页面都动态生成,如果用户离开了会话并通过书签或链接再次回来,会话的信息都会丢失,因为存储下来的链接含有错误的标识信息-该URL后面的SESSION ID已经过期了。介绍完了session,小编再来简单的介绍一下cookie。
cookie的基本原理
cookie在英文中的意思指的是就这牛奶一起吃的点心,然而,在因特网内,cookie这个字有了完全不同的意思,那么cookie到底是什么呢,cookie是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息,这是很有用的,让浏览器记住这位访客的特定信息,这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置,花费的时间或用户首选项如样式表,cookie是个存储在浏览器目录的文本文件,当浏览器运行时,存储在ram中,一旦从该网站或网络服务器退出,cookie也可存储在计算机的硬驱上,当访客结束其浏览器对话时,即终止的所有所有cookie。
简单来说,cookie的含义是服务器发送给浏览器的甜点,即服务器在响应请求时可以将一些数据以“键-值”对的形式通过响应信息保存在客户端,当浏览器再次访问相同的应用时,会将原先的cookie通过请求信息带到服务端,如下面的代码,servlet展示了cookie的功能:

 public void doGet(HttpServletRequest request, HttpServletResponse response)
                     throws ServletException, IOException {
          response.setContentType("text/html");
          PrintWriter out = response.getWriter();
          String option = request.getParameter("option");
          if ("show".equals(option)) {
              //获得请求信息中的Cookie数据
              Cookie[] cookies = request.getCookies();
              if (cookies != null) {
                  //找出名称(键)为“cool”的Cookie
                  for (int i = 0; i < cookies.length; i++) {
                      if ("cool".equals(cookies[i].getName())) {
                          out.println("<h2>" + cookies[i].getName() + ":"
                              + cookies[i].getValue() + "</h2>");
                       }
                  }
             }
          } else if ("add".equals(option)) {
              //创建Cookie对象
              Cookie cookie = new Cookie("cool", "yeah!");
              //设置生命周期以秒为单位
              cookie.setMaxAge(20);
              //添加Cookie
              response.addCookie(cookie);
         }

cookie可以用于保持用户的会话状态,但是cookie信息保存在客户端,存在较大的安全隐患,且一般浏览器对cookie的数目及其数据大小有严格的限制,在web应用中,一般情况下通过httpSession对象保持会话状态,每个cookie都可以设置一个最大生命周期,如果设置了该值,浏览器将会把该cookie写到硬盘上,但如果没有设置cookie的最大生命周期,这样的cookie成为会话cookie,她存在内存中,当浏览器关闭时,该cookie将会消失。
cookie和session的区别
a、cookie数据存放在客户的浏览器上,session数据存放在服务器上。
b、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用seesion。
c、session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能。
d、单个cookie在客户端的限制是3k,就是说一个站点在客户端存放的cookie不能大于3k。
小编寄语:该博文,小编主要简单的介绍了seesion和cookie、url重写以及session和cookie他们之间的区别。小编介绍的都是一些简单的理论知识,对于session和cookie的具体作用,还需要我们在实际项目中多多的体会。java学习,未完待续......

深入浅出seesion和cookie的更多相关文章

  1. [py]flask操作cookie&django的seesion和cookie机制

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  2. 简述Seesion和Cookie

    1.0 为什么需要session和cookie? 当用户在发送一个请求关得到返回信息之后,客户端与服务器端之间的网络连接就已经断开了,在下一个请求发送时,服务器无法确定这次请求和上次的请求是否来自同一 ...

  3. ASP.NET 之深入浅出Session和Cookie

    在做人事档案管理系统中,对于Session和Cookie的使用后理解更加深刻了,下面对本知识点总结学习. Session是什么? 简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有 ...

  4. Seesion和Cookie详解2

    转载来自: https://www.toutiao.com/a6693986851193094664/?tt_from=weixin&utm_campaign=client_share& ...

  5. Tomcat深入浅出——Session与Cookie(四)

    一.Cookie 1.1 Cookie概念 Cookie:有时也用其复数形式 Cookies.类型为"小型文本文件",是某些网站为了辨别用户身份,进行Session跟踪而储存在用户 ...

  6. 关于Cookie的有关内容

    1.首先谈谈http协议与状态保持. Http协议本身是无状态的,这与http协议本来的目的是相符的,客户端只需要简单的向服务器发出请求操作,然后服务器对请求作出响应.无论客户端还是服务器都没有必要记 ...

  7. [py][mx]django的cookie和session操作-7天免登录

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  8. 服务器对cookie信息加密

    通过redis的seesion对cookie信息加密  --- 防止cookie记录的用户信息泄露 import tornado.ioloop import tornado.web from data ...

  9. 《52讲轻松搞定网络爬虫》读书笔记 - Session和Cookie

    为什么要用Session和Cookie? 简单一句话,因为Session和Cookie可以记录用户状态信息 嘶..这到底啥意思呢? 背景一:动态网页的出现 什么是静态网页 含义:一个网页的内容是HTM ...

随机推荐

  1. [WC 2006]水管局长数据加强版

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  2. [NOIp 2013]货车运输

    Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重 ...

  3. Passward

    问题 A: Passward 时间限制: 1 Sec  内存限制: 512 MB 题目描述 你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s. 传说打开庙门的密码是这个字符串的一个子串 t,并 ...

  4. [BZOJ]4199: [Noi2015]品酒大会(后缀数组+笛卡尔树)

    Time Limit: 10 Sec  Memory Limit: 512 MB Description Input Output Sample Input 10 ponoiiipoi 2 1 4 7 ...

  5. 【USACO 5.3.1】量取牛奶 迭代

    Description 农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位——译者注) 他的最好的牛奶,并把它装入一个大瓶子中卖出.消费者要多少,他就 ...

  6. 【bzoj4568 scoi2016】幸运数字

    题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征. 一些旅行者希望 ...

  7. 【NOIP2012-开车旅行】

    这道题:你不仅要学会两人交换开车,还要做到高效驾驶. ·分析:       在拨开花哨题目的迷雾之后,发现两个重要突破口:       ①从每个点开始,他们的路径是一定的,不存在决策选取.       ...

  8. Entity Framework DBContext 增删改查深度解析

    Entity Framework DBContext 增删改查深度解析 有一段时间没有更新博客了,赶上今天外面下雨,而且没人约球,打算把最近对Entity Framework DBContext使用的 ...

  9. 使用foreach需要判空。

    今天写代码的时候,需要遍历一个作为参数传递进来的容器, 当时顺手就加上了判空条件: if(null==list)return; 后来就像,不知道遍历(foreach)有没有帮我做这个工作: 下面看实验 ...

  10. pm2快速使用

    介绍 pm2 是一个带有负载均衡功能的Node应用的进程管理器..它使您可以永久保持应用程序的活动状态,无需停机即可重新加载应用程序,并且可以方便常见的系统管理任务 特性 行为配置 源地图支持 容器集 ...