Java web基础总结六之—— Cookie与Session

Java web基础总结六之—— Cookie与Session

当我们在使用浏览器与服务器进行会话的过程中,就必然会产生一些数据。这个时候就需要对数据进行保存。比如常见的购物网站购物车信息的保存。保存客户端与服务器会话数据的两种技术是Cookie与Session。

一.Cookie
1.什么是Cookie?

Cookie是保存在客户端的,以name,value的形式保存。当用户使用浏览器访问服务器产生数据时,服务器程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web服务器就可以从请求中获得用户的数据了。

2.java 中实现cookie的相应的API

javax.servlet.http.Cookie类是java中的一个类。它用于创建一个Cookie,java的Response接口定义了一个addCookie方法,它可以在其响应头中增加一个相应的Set-Cookie头字段。同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。Cookie类有以下的一些常用的方法:

publicCookie(String name,String value)  构造方法

setValue与getValue   设值与取值

setMaxAge与getMaxAge  设置和获取cookie的最长存在的时间,单位为秒。

setPath与getPath方法   设置路径,可以实现同一应用服务器内共享cookie

setDomain与getDomain  设置主机,可以实现跨域共享cookie

getName方法           获取cookie的名字

3. 操作cookie需要注意的一些问题

Cookie的setMaxAge的方法的单位为秒,当设置为-1时,浏览器关闭cookie从浏览器自动删除。

一个Cookie只能标识一种信息,它必须含有一个name和一个value,一个WEB应用可以给一个WEB浏览器发送多个Cookie,同样的,用户的浏览器也可以存储多个WEB站点写入的Cookie。

浏览器存储的cookie的个数和大小是有限制的,一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

cookie默认是用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,服务器程序就需要使用maxAge,并给出一个以秒为单位的时间。如果设置为0则是命令浏览器删除该cookie。

比较重要,也比较容易忽略的是,删除cookie时,path和domin必须一致,否则不会删除.所以当我们想要删除一个cookie时,不光要设置maxAge为0,还需要把他的path和domin也设置的和原来的一样,以前做一个项目的时候,遇到过这个问题。

二.Session
1.      什么是Session?

和cookie不同的是,Session是保存在服务器端的,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,session是用户浏览器独享的,用户浏览器在访问服务器时,产生的数据也可以放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

2.      Session的API

在java中,有一个接口,javax.servlet.http.HttpSession。它主要有下面一些方法。

getId 此方法返回唯一的标识,这些标识为每个session而产生。

     getCreationTime()返回session被创建的时间。返回的是一个long型的从1970年1月1日到创建时间的毫秒数,即时间戳。

     GetLastAccessedTime 返回session最后被客户发送的时间。最小单位为千分之一秒。

     getAttribute 取session中的一个对象的值,由于这个方法的返回值是Object,所以要进行强制类型的转换。

setAttribute 设置一个key和value。相同的key时,新的值会替换掉任何以前的值。类似于HashMap.需要注意的是,设置的值为简单类型时,会自动装箱成对应的包装类。

3.      Session的一些细节问题

服务器为每个用户浏览器创建一个session对象,默认情况下,一个浏览器独占一个session对象。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问这个web应用的其他资源时,可以从用户的session中取出该用户的数据,为用户服务。Session对象由服务器创建,保存在服务器的内存中,我们可以调用request对象的getSession方法得到服务器的session对象。

当一个session长时间不在服务器活动时,就会被从服务器内存中清除,此时Session便失效。Tomcat中的Session的默认失效时间为20分钟。

用户浏览器传递上来的cookie中,会有一个保存诸如sessionID之类的cookie。所以服务器可以识别客户端浏览器对应的Session。所以当客户端禁用Cookie后,可以URL重写解决这个问题。主要有两个方法:response. encodeRedirectURL(java.lang.String url) 用于对sendRedirect方法后的url地址进行重写。response.encodeURL(java.lang.String url)用于对表单action和超链接的url地址进行重写。

  

三.Cookie与Session的区别

1.      Cookie是把用户的数据写给用户的浏览器,保存在浏览器中。Session是把用户的数据写到用户独占的session中,保存在服务器端。

2.      一个Cookie对象代表一个cookie,只能表示一个name和value,cookie中保存的是字符串。。Session类似于一个服务器端的一个基于HashMap的缓存。可以放入多个具有key,value的键值对的属性。value可以是任意的对象。

3.      Session没有path和domain,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。

4.      session是以cookie为基础的, 服务器需要通过客户端传来的一个名为JSESSIONID的cookie 来找到它对应的session。

时间: 2024-10-29 19:10:26

Java web基础总结六之—— Cookie与Session的相关文章

Java Web(三) 会话机制,Cookie和Session详解

一.会话机制 Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择.具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所

Java Web基础 --- Jsp 综述(下)

摘要: JSP脚本中包含九个内置对象,它们都是Servlet-API接口的实例,并且JSP规范对它们进行了默认初始化.本文首先通过一个JSP实例来认识JSP内置对象的实质,紧接着以基于请求/响应架构应用的运行机制为背景,引出JSP/Servlet的通信方式与内置对象的作用域,并对每个内置对象的常见用法进行深入介绍和总结. 一. JSP 九大内置对象概述及相关概念说明 JSP脚本中包含九个内置对象,这九个内置对象都是 Servlet API 接口的实例,并且JSP规范对它们进行了默认初始化(由 J

Java Web总结十六之一自定义标签

一.自定义标签简介 1.为什么要使用自定义标签? 自定义标签主要用于移除Jsp页面中的<%java%>代码. 2.开发自定义标签的步骤: 1)开发自定义标签处理类,该类需要实现SimpleTag接口/SimpleTagSupport类,重写doTag()方法. 2)编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述,并放置在WEB-INF/目录下. 3)完成以上操作,即可在JSP页面中导入和使用自定义标签. 二.自定义标签描述 1.实现SimpleTag接口的标签通常称为简单标

Java Web基础 --- Jsp 综述(上)

摘要: J2EE是一套规范,而Servlet/Jsp是J2EE规范的一部分,是Tomcat的主要实现部分.在最初的应用实践中,当用户向指定Servlet发送请求时,Servlet利用输出流动态生成HTML页面,这导致Servlet开发效率极为低下.JSP技术通过实现普通静态HTML和动态部分混合编码,使得逻辑内容与外观相分离,大大简化了表示层的实现,提高了开发效率.本文以JSP的本质是Servlet为主线,结合JSP转译后所得的Servlet,详细探讨了JSP的原理.执行过程.脚本元素.编译指令

Java Web基础 --- Servlet 综述(实践篇)

摘要: 伴随 J2EE 6一起发布的Servlet 3.0规范是Servlet规范历史上最重要的变革之一,它的许多新的特性都极大的简化了 Java Web 应用的开发.本文从一个简单的 Servlet 例子开始,说明了如何开发.配置一个 Servlet.此外,还重点叙述了Servlet的一些新特性,包括Servlet 异步处理.Servlet 非阻塞IO 以及 Servlet 文件上传等内容,以便我们对Servlet有一个更全面的了解. 本篇主要介绍 Servlet 实践方面的知识,更多关注于S

Java Web 基础 --- Filter 综述

摘要: 伴随J2EE一起发布的Servlet规范中还包括一个重要的组件--过滤器(Filter).过滤器可以认为是Servlet的一种加强版,它主要用于对用户请求进行预处理以及对服务器响应进行后处理,是个典型的处理链.Servlet规范使用了三个接口对过滤器进行了抽象,即Filter是对具体过滤器的抽象,FilterChain是基于AOP理念对责任链方面的抽象,FilterConfig则是对Filter配置的抽象.本文概述了Filter的提出动机.工作原理.使用流程和应用实例,并指出Java W

Java web基础总结五之—— HttpServletRequest与HttpServletResponse

Java web基础总结五之-- HttpServletRequest与HttpServletResponse 在前面总结过,每当客户端给Web服务器发送一个http请求,web服务器就会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象就代表请求和响应,所以我们可以通过request对象获得请求相关的数据和操作.通过response对象进行对响应相关的数据封装和一些其他的操作. 一.HttpServletRequ

Java web基础总结四之—— Servlet基础

Java web基础总结四之-- Servlet基础 一.什么是Servlet? 通过名字就能看出来,Servlet 就是在服务器上运行的小程序.Servlet是sun公司(现在已经属于oracle了)实现的一门用于开发动态java web资源的技术.Sun公司在其API中提供了一个servlet接口,如果你想开发一个动态的java web资源,需要完成以下2个步骤:编写一个Java类,实现servlet接口.把开发好的Java类部署到web服务器中. Servlet接口已经有了两个默认的实现类

Java web基础总结二之—— http协议

Java web基础总结之二--http协议 由于java web是基于B/S的,所以http协议是java web 最基础,也非常重要的知识.HTTP协议用于定义客户端与web服务器之间进行通信的格式.从web服务器中获得某个web资源或者web 服务器接受客户端的请求都需要遵守一定的通讯格式,就是http协议. 一.HTTP协议是什么? HTTP协议是学习java web的基石,同时也是管理和维护一些复杂的WEB站点的必备的基础,如果你想要深入的理解java web的服务器的实现,就更需要掌