`

Cookie & Session总结

 
阅读更多

 

一、状态管理
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/**Cookie.jsp   error
      /web06_2/app1/**Cookie1.jsp  ok
      /web06_2/app1/sub/**Cookie2.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,Servlet 容器能够重写客户请求的 URL,把 Session ID 添加到 URL 信息中。

        HttpServletResponse 接口提供了重写 URL 的方法:public java.lang.String encodeURL(java.lang.String url)

        该方法的实现机制为:
        ● 先判断当前的 Web 组件是否启用 Session,假如没有启用 Session,直接返回参数 url。
        ● 再判断客户端浏览器是否支持 Cookie,假如支持 Cookie,直接返回参数 url;假如不支持 Cookie,就在参数 url 中加入 Session ID 信息,然后返回修改后的 url。

        我们能够对网页中的链接稍作修改,解决以上问题:
        修改前:
            <a href=“maillogin.jsp“>
        修改后:
            <a href=“<%=response.encodeURL(“maillogin.jsp“)%>“>

 

分享到:
评论

相关推荐

    JWT相关知识及Cookie, Session,Token和JWT的区别总结.pdf

    中章:主要介绍一下Session并总结一下Cookie和Session。 下章:主要介绍Token的相关定义及理解。 终章:主要介绍JWT并总结JWT和Token的区别,以及总结Cookie到JWT的区别。 相关博客链接:...

    前端知识Cookie, Session,Token和JWT的发展及区别(一) 上章:主要介绍一下背景和Cookie

    上章:主要介绍一下背景和Cookie。...中章:主要介绍一下Session并总结一下Cookie和Session。 下章:主要介绍Token的相关定义及理解。 终章:主要介绍JWT并总结JWT和Token的区别,以及总结Cookie到Token的区别与发展。

    学习cookie的笔记和总结

    学习,cookie,笔记和总结,cookie和session的区别

    JAVAWeb全课程笔记( html版)

    Cookie&Session XML语言 JSP技术入门 EL表达式语言 JSTL标签库: JSP标准标签库 MVC程序架构思想&案例 [总结]Path路径问题 [总结]JavaWeb乱码问题 [转自IBM]中文编码问题 JDBC入门 Jdbc事务控制管理 常用数据库连接...

    Session相关知识点PDF版本

    包括Session的定义,特点,重要属性,优缺点,作用和使用场景,以及介绍Session的作用域及相关判断,总结了Cookie与Session之间的区别。 相关的博客连接:...

    ASP.NET保存信息总结(Application,Session,Cookie,ViewState和Cache等)

    ASP.NET保存信息总结(Application,Session,Cookie,ViewState和Cache等) .doc

    JavaWeb每日总结思维导图

    内容包括:MySQL、MySQL约束&多表、MySQL多表&事务、JDBC、数据库连接池、HTML、CSS、JS基础&高级、BootStrap、XML、Tomcat、Servlet&HTTP&Request、Response、Cookie&Session、JSP&EL&JSTL、Filter&Listener、...

    asp.net的session和cookie的应用

    这个对于web开发很有用途,这个是我总结下来的.............

    前端知识Token知识点笔记.pdf

    中章:主要介绍一下Session并总结一下Cookie和Session。 下章:主要介绍Token的相关定义及理解。 终章:主要介绍JWT并总结JWT和Token的区别,以及总结Cookie到Token的区别与发展。 相关博客笔记链接:...

    浅谈cookie和session(小结)

    主要介绍了浅谈cookie和session(小结),cookie和session在java web开发中扮演了十分重要的作用,本篇文章对其中的重要知识点做一些探究和总结

    对比分析php中Cookie与Session的异同

    主要通过多方面对比分析php中Cookie与Session的区别,分别对Cookie与Session做一个简单介绍和总结,感兴趣的小伙伴们可以参考一下

    ASP.NET中Application、Cookie、Session、Cache和ViewState

    本文主要介绍Application、Cookie、Session、Cache和ViewState,并总结了在什么情况下使用他们,希望对大家有所帮助。

    Symfony2之session与cookie用法小结

    主要介绍了Symfony2之session与cookie用法,结合实例形式总结分析了Symfony框架针对session与cookie的设置、获取及删除等操作的实现方法,需要的朋友可以参考下

    session机制详解

    目录: 一、术语session 二、HTTP协议与状态保持 三、理解cookie机制 四、理解session机制 五、理解javax.servlet.http.HttpSession 六、HttpSession常见问题 七、跨应用程序的session共享 八、总结

    PHP 之Section与Cookie使用总结

    SESSION与COOKIE区别: Session 将信息保存在服务器上.服务器在接受到唯一的SESSION_ID后,根据这个ID获取相关数据,然后将信息传递到客户端(浏览器). Cookie 是将所有信息以文本的形式存在本地文件,并由客户端(浏览器)...

    文华学院,javaweb上机练习题目1

    本资源是关于 Java Web 上机练习题目 1 的知识点总结,涵盖了 Servlet Programming、Request 和 Response 对象、Cookie 和 Session 等相关知识点。 Servlet Programming Servlet 是 Java Web 开发中的一种核心技术...

    第九节 cookie的httponly设置-01

    Cookie 通常用于辨别用户身份、进行 session 跟踪。Cookie 可以包含一些不敏感的信息,如用户名、密码等。 Cookie 的介绍 Cookie 是一种客户端存储机制,由 Web 服务器保存在用户浏览器(客户端)上的小文本文件。...

    php中删除、清空session的方式总结

    session删除清空是很讲究了如果我们定义好可以清除指定变量否则不小心会把所有session都清除掉了,下面我们来看一些总结。 第一种方式:unset($_SESSION[‘xxx’]) 删除单个session,unset($_SESSION[‘xxx’]) 用来...

    JSP与Servlet 技术总结

    11. Cookie学习 7 12. Session学习 9 Servlet技术总结 9 1. Servlet生命周期 9 2. Servlet的方法说明: 10 3. Servlet 在web.xml中的配置 10 4. Servlet元素说明 11 5. 如何写一个Servlet? 11 6. 在web.xml里配置...

    ASP.NET中Session和Cache的区别总结

    以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application。其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息。Session则保存对话信息。Application则是保存在整个...

Global site tag (gtag.js) - Google Analytics