转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view

一、状态管理
1)什么是状态管理?
  将浏览器与web服务器之间多次交互过程当做一个整体来处理,并且将多次交互所涉及的数据进行管理。
2)状态管理技术
cookie:
  a,什么是cookie?
   是一种客户端(浏览器)的状态管理技术。
   浏览器在访问web服务器的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这结数据保存下来;当浏览器再次访问服务器的时候,会将这些数据以cookie消息头的方式发送给服务器。
  b,创建cookie
   Cookie c = new Cookie(String name,String value);
   response.addCookie(c);
  c, 查询cookie
   //如果没有cookie,返回null
   Cookie[] request.getCookies();
   String cookie.getName();
   String cookie.getValue();
  d, 编码问题
   cookie的值只能是ascii字符,对于中文,需要将中文转换成相应的ascii字符串的表示形式。
    String URLEncoder.encode(String,String enc)
    //创建 new Cookie(String name,URLEncoder.encode(String,"utf-8"))
    String URLDecoder.decode(String,String)//取
    URLDecoder.decode(cookie.getValue(),"utf-8")
  e, cookie的生存问题
   默认情况下,浏览器会将cookie保存在内存里,除非浏览器关闭,cookie一直存在。
   用setMaxAge(int seconds)设置cookie保存时间
   该方法需要注意:
    (1) 单位是秒
    (2) seconds >0 : cookie会保存在硬盘上,超过指定的时间,浏览器会删除该cookie。
     seconds <0 : 缺省值(保存在内存里)
     seconds =0: 删除cookie,
     比如,要删除一个名叫addr的cookie:
        Cookie c = new Cookie("addr","");
        c.setMaxAge(0);
        response.addCookie(c);      
  f,cookie的路径问题
   f1:浏览器在向服务器的某个地址发请求时,会先比较cookie的路径与要访问的这个地址是否匹配,只有匹配的cookie才会发送。
   f2:cookie会有一个路径(是一个字符串),该路径默认情况下等于创建该cookie的组件的路径。
   比如,/web06_2/app1/addCookie.jsp创建的cookie,其路径就等于"/web06_2/app1"。
      /web06_2/findCookie.jsp   error
      /web06_2/app1/findCookie1.jsp  ok
      /web06_2/app1/sub/findCookie2.jsp  ok
   f3: 只有要访问的地址是cookie的路径或者其子路径时,浏览器才会发送该cookie。
   f4:可以用setPath(String path);方法设置cookie的路径
      常见的使用是: setPath("/appname");访问该应用的所有资源都会带cookie过去了
  g,cookie的限制
  (1), cookie可以被用户禁止。
  (2), cookie能够保存的数据大小有限制(大约4k)。
  (3), cookie的个数有限制(浏览器在本地最大能够保存约300个左右的cookie)。
  (4), cookie不安全

session:
(1)什么是session?
  是一种服务器端的状态管理技术。
  浏览器访问服务器的时候,服务器会创建一个session对象(每一个session对象都有唯一的一个id号,一般称之为sessionId),默
认情况下,服务器会使用cookie技术将sessionId发送给浏览器,浏览器会将sessionId保存下来。当浏览器再次访问服务器的时候,会将
sessionId发送给服务器,服务器依据sessionId,就可以找到之前创建的session对象。
(2)如何获得session对象?
  a, 方式一:
   HttpSession s = request.getSession();
   等价于request.getSession(true)。
  b, 方式二:
   HttpSession s = request.getSession(boolean flag);
   当flag=true时:
    服务器会查看请求当中是否有sessionId,如果没有,则创建一个session对象;如果有sessionId,则依据sessionId查找对应的session对象,如果找到了,则返回;找不到,再创建一个新的session对象。
   当flag=false时:
    服务器会查看请求当中是否有sessionId,如果没有,会返回null;如果有sessionId,则依据sessionId查找对应的session对象,如果找到了,则返回;找不到,返回null。
(3)HttpSession中声明的几个常用方法
  setAttribute(String name,Object obj);
  //如果绑订名称对应的值不存在,返回null。
  Object getAttribute(String name);
  removeAttribute(String name);  
(4)session的超时
  1)服务器会将空闲时间过长的session对象从内存空间当中删除。服务器一般会有一个缺省的超时时间限制(30分钟)。
  2)可以修改超时限制
   对于tomcat,可以修改conf\web.xml,修改完成需要重新启动服务器。
   <session-config>
          <session-timeout>30</session-timeout>
      </session-config>
      3)编程的方式
       setMaxInactiveInterval(int seconds);
(5) 删除session
       invalidate();

二、session与cookie的区别
(1)cookie是一种客户端的状态管理技术,将状态写在浏览器端,
  而session是一种服务器端的状态管理技术,将状态写在web服务器上面。
(2) cookie有很多限制:
  a,可以被用户禁止
  b,cookie能够保存的数据比较小(大约4k),而且保存的个数也有限制(300个左右)。
  c,cookie不安全
  d,cookie只能保存字符串
  而session能够保存更多的数据,相对更安全,保存的数据类型更丰富。
  session会将所有的状态写在服务器端,所以服务器的压力比较大,而cookie没有这个问题。

小知识:如果用户禁止cookie,如何继续使用session(了解)
   (1)url重写
    在请求地址后面添加sessionId,一般由服务器来生成这个地址。
   (2)编程:
    //链接地址,表单提交地址
    a, response.encodeURL(String url);
    //重定向
    b, response.encodeRedirectURL(String url);
    //转发根本不用考虑

【转】学习总结--Cookie & Session总结的更多相关文章

  1. python 学习笔记十九 django深入学习四 cookie,session

    缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...

  2. Web安全测试学习笔记(Cookie&Session)

    一,Session:含义:有始有终的一系列动作\消息1, 隐含了“面向连接” 和“保持状态”两种含义2, 一种用来在客户端与服务器之间保持状态的解决方案3, 也指这种解决方案的存储结构“把××保存在s ...

  3. Django学习手册 - cookie / session

    cookie """ cookie属性: obj.set_cookie(key,value,....) obj.set_signed_cookie(key,value,s ...

  4. Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期

    servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...

  5. node(4)express 框架 EJS模板,cookie, session的学习

    一.EJS 概述:前端咱们使用过的一个模板套路,是underscore的套路.接下来EJS它属于后台工程师人的模板. https://www.npmjs.com/package/ejs 官网地址 特点 ...

  6. Javaweb学习笔记5—Cookie&Session

    今天来讲javaweb的第五阶段学习. Cookie和Session同样是web开发常用到的地方. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的 ...

  7. Java web学习 Cookie&&Session

    cookie&&session 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会 话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Coo ...

  8. node学习之cookie和session

    c什么是cookie Cookie设计的初衷是 维持浏览器和服务端的状态.http是无状态的,服务端不能跟踪客户端的状态. 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏 ...

  9. node学习笔记9——cookie,session相关操作

    下面讲的都是基Express及相关的包.所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包. 先简单说一下,如何用Expr ...

随机推荐

  1. 在Hyper-V的虚拟机中使用无线网络

    今天在WINDOWS 8.1中装了WINDOWS 7的虚拟机,但默认情况下只能共享有线网络,而没有无线网络. 解决方法: http://www.elmajdal.net/Win2k8/Enabling ...

  2. 转:python字符串/元组/列表/字典互转

    #-*-coding:utf-8-*-  #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ...

  3. Java基础(47):插入排序的Java封装(含原理,可运行,哨兵位的理解见VisualGo上面的动态分析)

    直接插入排序(Straight Insertion Sorting)的基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使 ...

  4. paper 76:膨胀、腐蚀、开、闭运算——数字图像处理中的形态学

    膨胀.腐蚀.开.闭运算是数学形态学最基本的变换.本文主要针对二值图像的形态学膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔):腐蚀:把二值图像各1像素连接成分的边界点去掉从而 ...

  5. html5新增全局属性

    data-* 如:data-type,data-role等 hidden  <div hidden></div> 隐藏该div spellcheck <textarea ...

  6. oracle的用户

    1:创建用户 create user zhaoyb identified by zhaoyb default tablespace HUAPUSALEDB create user 用户名 identi ...

  7. Java高效编程之一【创建和销毁对象】

    一.考虑用静态工厂方法替代构造函数 代表实现:java.util.Collection Framework Boolean类的简单例子: public static Boolean valueOf ( ...

  8. [fedora21]给fedora21安装fcitx输入法

    如果已经安装了ibus,需要卸载ibus:   sudo yum remove ibus; 安装fcitx: sudo yum install fcitx fcitx-pinyin fcitx-con ...

  9. 在Asp.Net的Global.asax中Application_Error跳转到自定义错误页无效的解决办法

    在开发Asp.Net系统的时候,我们很多时候希望系统发生错误后能够跳转到一个自定义的错误页面,于是我们经常会在Global.asax中的Application_Error方法中使用Response.R ...

  10. SSAS计算列如果是中文名称时,必须要在名字外加中括号

    在SSAS中建计算列的时候,如果你给计算列起的是中文名字,一定记住要在名字外加中括号,比如下面这个例子中我们建了一个叫 客服流失数 的计算列 下面图中没有在计算列名称上加中括号这是错误的,因为使用中文 ...