1、开篇

在之前学习这一段的时候我一直有点没弄清楚,其实对Session这块的理解还可以,但是Cookie感觉始终还是欠缺点火候。之后的很长一段时间都基本上很少用Cookie了,渐渐的也淡忘了这一块的知识。

昨天我鼓起勇气,看了一些网上的资料了一些之前学习的资料,对着两个知识点进行一个小总结。希望可以帮助到观看这篇随笔的读者们。

2、Cookie和Session的介绍 (会话管理技术概述)

(1) 什么是会话?
 这里的会话指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。
例如:

我们去网吧上网,在吧台拿到用户名和密码,然后找机器登录,这时候机器就认识了我们,我们就可以开始上网,这就相当于我们开启了一次上网的会话,当我们点击结束下机(或者遇到关机重启),

或者上网时间到了,这时候机器就不再认识我们,那么就叫会话结束。

(2)会话管理技术能做什么?

共享同一个客户浏览器多个请求中数据,例如购物车。(简单权限过滤)

3、会话管理技术一(Cookie)

(1)什么是cookie?

它是客户端浏览器的缓存文件,里面记录了客户端浏览器访问网站的一些内容。它也是Http协议请求和响应消息头的一部分。

(2)cookie能做什么?

能保存客户端浏览器访问网站的相关内容,需要服务器开启cookie。从而每一次访问时,先从本地获取缓存,使用资源共享,并且提高效率。

(3)Cookie的说明。

Cookie有大小,个数限制。每个网站最多只能存20个cookie,且大小不能超过4kb。(32bit 不能超过4096MB)同时,所有网站的cookie总数不超过300个。

(4)Cookie中的属性
        属性:
            name:必要属性,cookie的名称。
            value:必要属性,cookie的值(不能是中文)
            ---------------------------可选属性---------------------------------
            path:cookie的路径(重要)
            domain:cookie的域名(重要),相当于访问的网站(localhost)
            maxAge:cookie的生存时间(相当于生命周期的活着)(比较重要),
                     当删除cookie时,设置该值为0。
                     当不设置该值时,使用的是浏览器的内存,当关闭浏览器之后,cookie将丢失。设置了此值,就会保存成缓存文件(值必须是大于0的,以秒为单位)。
            version:cookie的版本号。(不重要)
            comment:cookie的说明。(不重要)

(5) 在web应用中如何设置和获取Cookie
        定义一个Cookie
            Cookie  cookie  =  new  Cookie(cookieName,cookieValue);
        HttpServletRequest 获取 Cookie
            Cookie[]  cookies = request.getCookies();
            该方法返回的是一个数组。(为什么是数组呢,方便,可以直接拿到与该请求相关的所有cookie)
        HttpServletResponse 添加Cookie
            response.addCookie(cookie);
        添加一个cookie,其实就是添加一个响应消息头
                response.setHeader("Set-Cookie","name=value;path=;maxage=;domain=");
        (为什么没有set方法,原因是set就会把之前的覆盖,所以每次都是添加)。
        如何确定一个唯一的cookie:cookieName+cookiePath+cookieDomain
        定位一个cookie是由 cookie的名称和路径,主机(访问的资源)三部分组成

4、会话管理技术二(Session)--Tomcat的默认过期时间是30分钟。
(1)什么是Session?
            它是一个服务端会话对象,存储用户的会话数据。

(2)获取session的两种方式
            方式一:request:getSession();

查看是否有jsessionid;1)有通过jsessionid获取session;2)有这块区域就直接用了。

2) 没有这块区域就开辟一块session区域。

1)没有直接开辟一块session的区域。

方式二:request:getSession(Boolean b);true和上面的方法一样,下面是false的解释。

查看是否有jsessionid;1)有通过jsessionid获取session;2)有这块区域就直接用了。

2) 没有直接返回null

1)没有直接返回null

(3)HttpSession对象的状态
        a、什么是持久态
            把长时间不用,但还不到过期时间的HttpSession进行序列化,写到磁盘上。
            我们把HttpSession持久态也叫做钝化。(与钝化相反的,我们叫活化。)
        b、什么时候使用持久化
            第一种情况:当访问量很大时,服务器会根据getLastAccessTime来进行排序,对长时间不用,但是还没到过期时间的HttpSession进行持久化。
            第二种情况:当服务器进行重启的时候,为了保持客户HttpSession中的数据,也要对HttpSession进行持久化。

5、关于jsessionid说明

当我们在JAVA后台获取到一块session空间的时候,返回时已经将这块session的id也就是jsessionid代入到浏览器的cookie中(前提是cookie打开),如果你的浏览器cookie没有打开,

/**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
          //将字符集设置,放在方法体首位
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("text/html;UTF-8");
        HttpSession session = request.getSession();
        System.out.println(session);
        String reUrl = response.encodeRedirectURL("TestServlet");//浏览器cookie没有打开只用这个方法,可以在url后面加上jsessionid,保持会话的持续,注意的是需要所有的跳转都加上这个方法才可以保持jsessionid的拼接
        response.sendRedirect(reUrl);
    }

例如:http://localhost:8080/ssm/TestServlet;jsessionid=059A89AE1D32790B3DB6C61C5E138DD1

带jsessionid的url到后台后,可直接获取session,如果存在获取到的session对象是和之前一样的对象。

打印结果:

一月 04, 2017 11:16:10 上午 org.apache.catalina.core.StandardContext reload
信息: Reloading Context with name [/ssm] is completed
aaaaaaaaaaaaaaa
org.apache.catalina.session.StandardSessionFacade@194c6bd
org.apache.catalina.session.StandardSessionFacade@194c6bd
一月 04, 2017 11:16:18 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'appServlet'
一月 04, 2017 11:16:18 上午 org.springframework.web.servlet.FrameworkServlet initServletBean
信息: FrameworkServlet 'appServlet': initialization started

Cookie和Session的总结的更多相关文章

  1. java的会话管理:Cookie和Session

    java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...

  2. Cookie和Session的那些事儿

    Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能.Cookie是客户端(也就是浏览器端)的技术,设置了Cookie之后,每 ...

  3. django的cookie和session以及内置信号、缓存

    cookie和session cookie和session的作用: cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话.两者最大的区别是cookie的信息是存放在浏览 ...

  4. Cookie和Session的区别

    前言 HTTP是一种无状态的协议,为了分辨链接是谁发起的,就需要我们自己去解决这个问题.不然有些情况下即使是同一个网站我们每打开一个页面也都要登录一下.而Session和Cookie就是为解决这个问题 ...

  5. 本地数据Store。Cookie,Session,Cache的理解。Timer类主要用于定时性、周期性任务 的触发。刷新Store,Panel

    本地数据Store var monthStore = Ext.create('Ext.data.Store', { storeId : 'monthStore', autoLoad : false, ...

  6. Cookie与Session

    再说Cookie与Session之前,先要了解一下http协议. 何为http协议: http协议即超文本传输协议,一种基于浏览器请求与服务器响应的协议,该协议主要的特点就是它是一种无状态的协议(只针 ...

  7. 【转】Cookie和Session区别和联系详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  8. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  9. cookie 和session 的区别详解

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

随机推荐

  1. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  2. redux-amrc:用更少的代码发起异步 action

    很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...

  3. JS核心系列:浅谈原型对象和原型链

    在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...

  4. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  5. Linux中进行单文件内容的复制

    文件内容复制的常规方法: 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长 一次性复制文件的内容,这种方法必须首先获取 ...

  6. javascript:逆波兰式表示法计算表达式结果

    逆波兰式表示法,是由栈做基础的表达式,举个例子: 5 1 2 + 4 * + 3 -  等价于   5 + ((1 + 2) * 4) - 3 原理:依次将5 1 2 压入栈中, 这时遇到了运算符 + ...

  7. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  8. 计算Div标签内Checkbox个数或已被disabled的个数

    先看下面的html: 计算div内的checkbox个数:$('#divmod input[type="checkbox"]').length 计算div内checkbox被dis ...

  9. JavaScript基础学习-函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...

  10. Android Weekly Notes Issue #236

    Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...