转载地址: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. TNS-01189: The listener could not authenticate the user

    查看监听时,发现监听状态异常,报TNS-01189: The listener could not authenticate the user错误 $ lsnrctl stat LSNRCTL - P ...

  2. system(linux) power on note

    读詹荣开文档摘 BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader Boot Loader执行全 ...

  3. c#操作Excel时,抛出异常:“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”

    我们开发环境下,使用excel导入数据到数据库中,编译的软件起初是x86 方式,起初并未发现什么问题,一切很正常: 程序该进的过程: 后来导入文件一次就要读取几百G的数据导入数据库中,使用编译的X86 ...

  4. Lintcode: Expression Evaluation (Basic Calculator III)

    Given an expression string array, return the final result of this expression Have you met this quest ...

  5. Leetcode: Word Pattern II

    Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...

  6. Git的status命令

    这个命令是用来查看当前版本库的状态,如果当前版本库没有任何改变,而且都已提交,那么使用status命令结果如下: 如果有文件改变了,但是没有使用add,那么使用status命令结果如下: 如果使用了a ...

  7. JavaOOP QuickHit项目分析

    项目需求:游戏等级6级,随机字符串每级长度不同.每升一级减少比较次数,但是字符串长度相应增加!每级总分数不同,如果游戏中途输入错误则游戏退出!玩家每次在规定时间内输入字符串的同时,打印出游戏难度等级. ...

  8. MSSQL 判断实例中是否存在某种表

    执行语句 SELECT 'SELECT * FROM '+Name+'..SysObjects Where XType=''U'' and name=''tab_scartrim'' ORDER BY ...

  9. 夺命雷公狗—angularjs—24—extend继承对象

    我们的angularjs中也是给我们留下了方法来做继承的,那么他就是传授中的extend... 不过要如下所示,第二个参数是继承到第一个对象里面的... <!DOCTYPE html> & ...

  10. JSON讲解和“弹窗”

    json定义形式{key1:value1, key2:value2, key3:value3.....} 例: title>JSON讲解</title> <script src ...