Cookie和Session

原创 2016年07月16日 17:21:43

1、会话

在日常生活中,我们和别人的一次交流就是回话。web会话可简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。比如我们在网上购物,登陆后,会话开始,关闭浏览器后,这个会话就结束了。当我们再次打开浏览器,想要购物的时候,还得重新登陆。(但是,有的时候我们长时间静止在网站上,再次看时需要重新登陆,这是也了安全)

注意:并不是打开一个网页就是一个会话,比如ie打开个标签并不是会话,而是右键菜单–文件–新建会话(不同浏览器不一样)。

2、为什么会有Cookie和Session

原因:http无状态的协议,什么是无状态呢,是指http没有记忆的功能。如果没有状态的情况下,需要每次链接都传送大量数据,比如说在购物的时候,如果没有cookie和session每浏览加入购物车一次都得重新登陆。
为了解决这一问题,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

3、Cookie:客户端会话

Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

cookies有什么作用呢?比如我们在某个网站注册了,当我们下次访问的时候,会向你问好。比较常见的是记住密码(一周内记住我)之类的。很方便我们再次访问。
这里写图片描述

以记住用户名和密码为例:
我们在myeclipse中新建web project项目
在AServler中发送给浏览器用户名和密码,在BServlet中得到用户名和年龄了:
这里写图片描述
代码如下:
在AServlet中

public class AServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 发送cookie让浏览器记住
        //创建Cookie对象,记住的内容是键值对形式;
        Cookie cookie = new Cookie("name", "yu");
        Cookie cookie2 = new Cookie("age", "20");
        //将cookie发送给浏览器;
        response.addCookie(cookie);
        response.addCookie(cookie2);
    }
}

在BServlet中

public class BServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 取出在AServlet要求在浏览器中记住的信息
        Cookie cookies[] = request.getCookies();
        if (cookies != null) {
            for (Cookie c : cookies) {
                if (c.getName().equals("name")) {
                    System.out.println("从AServlet中获取的用户名" + c.getValue());
                } else if (c.getName().equals("age")) {
                    System.out.println("从AServlet中获取的用户名" + c.getValue());
                }
            }
        }
    }
}

然后首先访问AServlet,再访问BServlet,这样看打印日志:
这里写图片描述
这样我们就从BServlet中取出AServlet中的用户名和密码了。
首先访问AServlet的时候
分析,使用Fiddler抓包:
这里写图片描述
从上面可以看出这就是浏览器记住cookie的位置

然后再访问BServlet抓包:
这里写图片描述

当我们再次访问浏览器的时候,从请求中可以看出cookie从请求头在携带过去

  1. 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
  2. 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
  3. 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
  4. 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
  5. 注意,删除cookie时,path必须一致,否则不会删除

3、Session:服务器端会话

session也是一种会话,cookie是把数据写在客户端,而session是把数据存储在服务器
这里写图片描述
session技术基于cookie没有cookie,session也无法完成。
既然session是存储在服务器的工作,那么我们客户端就少了很多工作
1、浏览器在第一次访问服务器时,服务器发现没有携带sessionId,会自动创建session对象。并将创建的cookie对象保存sessionId发送给浏览器。
2、在浏览器发送请求时,带有cookieid的session


Session实际应用场景

1、使用Session完成用户登陆;利用Session实现一次性验证码
2、利用Session防止表单重复提交

用session实现验证码

  1. 在原表单页面,生成一个验证码的图片,生成图片的同时需要把该图片中的字符串放入到session中。
  2. 在原表单页面,定义一个文本域用于输入验证码。
  3. 在目标的Servlet 中:获取session 和 表单域中的验证码的值
  4. 比较两个值是否一致:若一致,受理请求,且把session域中的验证码清除
  5. 若不一致,则直接通过重定向的方式返回原表单页面,并提示用户“验证码错误”

这里写图片描述

下面这篇是session在android中的使用(android中图片验证码)
http://blog.csdn.net/androidxiaogang/article/details/51943216

4、session过期

在我们登陆后,都会设置session的时效,确保用户在一段时间内没有登陆,重新登陆。一方面为用户安全,另一方面减少服务器压力。
session的时效设置是由服务器的时间来统计的
比如设置session.setMaxInactiveInterval(600),即在没有活动10分钟后,session将失效。 这时候提示用户重新登陆就可以了

Cookie/Session机制详解

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端...
  • fangaoxin
  • fangaoxin
  • 2011年11月09日 17:55
  • 382625

浅谈Session与Cookie的区别与联系

一、Session的概念Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识...
  • duan1078774504
  • duan1078774504
  • 2016年07月14日 21:02
  • 23385

cookie和session的基本用法小结

这两天初步看了下cookie和session的用法,就个人理解,总结如下: 总结这些之前,先说下一次会话的概念,一次会话可以简单的认为是一个进程,也就是打开一个浏览器,只要不点那个×,都是一次会话,...
  • u010242979
  • u010242979
  • 2014年05月24日 23:13
  • 859

asp.net中cookie和session的区别和相关使用

彻底研究了下cookie和session的原理,发现了很多有趣的东西,原来我的很多想法和制定协议的那些大神们也有相同之处! cookie是存放于用户的本地的机器上的小文件,由浏览器创建和读写这个...
  • wangyh_128
  • wangyh_128
  • 2014年08月14日 11:21
  • 769

session与cookie的介绍和两者的区别之其相互的关系

本文分别对Cookie与Session做一个介绍和总结,并分别对两个知识点进行对比分析,让大家对Cookie和Session有一个更深入的了解,并对自己的开发工作中灵活运用带来启示。 c...
  • weixin_37196194
  • weixin_37196194
  • 2017年02月19日 18:28
  • 3243

PHP Cookie与Session的使用与区别

Cookie与Session Cookie和session是目前使用的两种存储机制。 cookie是从一个WEB页到下一个WEB页面的数据传送方法,cookie存储在客户端。 Session是让...
  • czh0423
  • czh0423
  • 2015年06月02日 16:09
  • 2817

SESSION是否依赖COOKIE问题总结

Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但为什么禁用Cookie就不能得到Session...
  • CNYYGJ
  • CNYYGJ
  • 2016年12月01日 00:21
  • 1309

Cookie与Session的区别与联系及生命周期

前几天面试问了一个问题,当时记不太清了,上网查了下发现这个问题还真的很有讲究而且很重要,自己总结下做下记录。 一、Session与Cookie介绍 这些都是基础知识,不过有必要做深...
  • tanyunlong_nice
  • tanyunlong_nice
  • 2015年08月01日 18:01
  • 16102

第三章 Java基础之cookie和session的区别和联系

在介绍cookie和session之前先废话两句,最近面试了两家公司,第一家公司在笔试题中问道了对cookie的属性作介绍,第二家在面试的过程中问道了cookie和session的区别,自己只说了两点...
  • wangbiao007
  • wangbiao007
  • 2016年03月05日 16:58
  • 1469

Session是通过Cookie来传id的

版权声明:本文为博主原创文章,未经博主允许不得转载。 1、HttpSession session = request.getSession(); 根据情况当这句代码需要创建session的时候...
  • qq_35114086
  • qq_35114086
  • 2016年08月30日 21:51
  • 1315
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cookie和Session
举报原因:
原因补充:

(最多只允许输入30个字)