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将失效。 这时候提示用户重新登陆就可以了

会话session和cookie原理(备java基础,jsp,servlet,tomcat)

本课程包含会话概念、HttpSession接口的使用方法、使用会话实现访问控制、已完成的Demo的登录控制及会话失效、使用会话失效实现退出登录功能、会话实现机制、了解Cookie阻止处理及Cookie与会话的区别。QQ群:264572737
  • 2016年10月12日 10:11

Android客户端访问服务器保持SESSION会话的实现

大家在电脑上登录网上购物商城的时候购物,先进行登录,输入用户名密码,然后看到自己中意的商品就点开它的详情页面查看详细参数,然后决定买不买,在打开详情页面的时候,页面已经实现了跳转,那么第二个页面是服务...
  • yaochangliang159
  • yaochangliang159
  • 2015-12-30 12:01:42
  • 10900

Android应用开发之Session,Cookie

Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。 Session可以用Cookie来实现,也可以用URL回写的机制...
  • fanflame4444
  • fanflame4444
  • 2013-11-08 13:05:42
  • 4565

Android 实现 session 保持

最近在开发项目的过程中,遇到 android 与 web 服务器要在同一 session 下通信的问题。先来了解一下 session 机制 和 session 的实现方式: Sess...
  • qq_35114086
  • qq_35114086
  • 2016-08-30 22:35:29
  • 6906

Cookie和Session详解

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端...
  • gaoyong_stone
  • gaoyong_stone
  • 2018-03-12 11:08:47
  • 76

Cookie/Session机制

转自:点我 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session...
  • Wshiduo
  • Wshiduo
  • 2017-02-14 23:19:54
  • 578

经典收藏Cookie和Session

  • 2008年11月02日 19:39
  • 17KB
  • 下载

Cookie、Session和缓存

Cookie1、获取Cookierequest.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', ...
  • m0_37886429
  • m0_37886429
  • 2017-09-19 10:30:56
  • 398

会话(cookie session)

会话技术:即实现登陆标志的存储,要求其能区分浏览器,并在浏览器的多次请求周期内,可以持久存储的一种存储机制. 【注:该登陆标志不能用数据(变量,常量)来标记,因为数据都有一定的生命周期,一个脚本的周期...
  • gui_111
  • gui_111
  • 2016-07-23 21:30:23
  • 191

django session cookie配置

SESSION_ENGINE="django.contrib.sessions.backends.file"  #session后端存储方式(可以是数据库、缓存、文件) SESSION_FILE_P...
  • clh604
  • clh604
  • 2013-06-27 14:32:58
  • 3312
收藏助手
不良信息举报
您举报文章:Cookie和Session
举报原因:
原因补充:

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