转载地址: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. AWR--导出AWR数据

    SQL> create or replace directory expdp_dir as '/home/oracle/dump'; Directory created. SQL> @$O ...

  2. LinQ系列文章

    温故而知新,想着系统再学习一次LinQ知识点,发现园子里有个非常棒的系列文章,所以Mark下来,方便以后查阅! 系列博客导航: LINQ之路系列博客导航 LINQ之路 1:LINQ介绍 LINQ之路 ...

  3. wpf 面试题目

    初级工程师 解释什么是依赖属性,它和以前的属性有什么不同?为什么在WPF会使用它?什么是样式什么是模板绑定(Binding )的基础用法解释这几个类的作用及关系: Visual, UIElement, ...

  4. RESTful架构详解(转)

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  5. [转] 多线程 《深入浅出 Java Concurrency》目录

    http://ifeve.com/java-concurrency-thread-directory/ synchronized使用的内置锁和ReentrantLock这种显式锁在java6以后性能没 ...

  6. springday03-go1

    springday02项目下新建包annotation11.复制xml文件到包annotation1下,并添加组件扫描方式代码2.Waiter类实现序列化接口,构造函数,并使用特定注解标记waiter ...

  7. CCF真题之窗口

    201403-2 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示 ...

  8. 16---Net基础加强

    更新中,敬请期待............ Xml介绍 xml读写练习 xml练习1 xml练习2

  9. IIS、Asp.net 编译时的临时文件路径(转载)

    IIS上部署的ASP.NET站点都会在一个.Net Framework的特定目录下生成临时编译文件增加ASP.NET站点的访问性能,有时候需要手动去删除这些临时编译文件,特别是发布新版本代码到IIS后 ...

  10. 对DotNet分布式应用搭建的考虑

    设计前的考虑和准备工作 1 对业务需求的理解重要性远远胜于对技术架构的理解 2 架构包含技术架构和业务架构 3 没有万能和通用的架构,只有符合自身业务需求的架构 4 架构本身的复杂性要截至在架构设计阶 ...