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.Stringurl) 用于对sendRedirect方法后的url地址进行重写。response.encodeURL(java.lang.Stringurl)用于对表单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。

java web 对cookie技术、session技术进行小结

Session是一种服务器端技术, Session 对象在服务器端创建,通常采用散列表来存储信息,例如, Tomcat 的 Session 实现采用 HashMap 对象来存储属性名和属性值。

Cookie是由 Netscape 公司发明的、用于跟踪用户会话的一种方式。 Cookie 是由服务器发送给客户的片段信息,存储在客户端浏览器的内存中或硬盘上,在客户随后对该服务器的请求中发回它。

Cookie小结

① Cookie在服务端创建 Cookie cookie = new Cookie(name,value);

② Cookie是保存在浏览器这端 response.addCookie(cookie);

③ Cookie的生命周期可以通过cookie.setMaxAge(int second)来设置 Cookie默认生命周期是会话级别(即存储在浏览器的内存中) 如果没有设置setMaxAge()?则该cookie的生命周期当浏览器关闭时就挂了,setMaxAge(0) +response.addCookie(cookie),相当于删除Cookie 此时如果cookie文件内部只有该Cookie则,文件也一并删除;否则只删除该Cookie

④ Cookie可以被多个浏览器共享

⑤ 一个web应用可以保存多个cookie(放置在同一个文件内部) ,最多不要超过20个,每个Cookie的大小限制为4kB,因此Cookie不会塞满你的硬盘?更不会被作为"拒绝服务"的攻击手段。浏览器一般保存的Cookie不会超过300个

⑥ Cookie存放中文,出现的乱码问题 存放String val = java.net.URLEncoder.encode("中文名称","utf-8"); Cookie cookie = new Cookie("name","val"); 读出? String val = java.net.URLDecoder.decode

(cookie.getValue("name"),"utf-8"); out.println("name="+val)

session小结:

① Session是存放在服务器的内存中

② 一个用户浏览器,独享一个session域对象

③ Session中的属性的默认生命周期是30min,可以通过web.xml来修改

④ Session中可以存放多个属性(包括对象)

⑤ 如果session.setAttribute(name,value);中name相同,则会替换掉。

Session VS Cookie :

1.存储位置不同: Cookie存在在客户端(临时文件夹) Session存在服务器内存中,一个session域对象为一个用户浏览器服务

2.安全性: Cookie以明文方式存放在客户端,安全较弱,可以通过MD5加密算法在存放 Session存放在服务器端内存中,所以安全性较好

3.网络传输量: Cookie会传递信息给服务器 Session的属性值不会给客户端

4.生命周期: Cookie的声明周期是累计时间 Session的生命周期是访问session的间隔时间,在一些情况下session也会失效?关闭tomcat,reload web应用,时间到,调用invalidate()[安全退出]

5.从访问范围 :Session为一个浏览器独享 Cookie为多个用户浏览器共享 因为session会占用服务器的内存,因此不要向session存放过多、过大的对象,会影响性能。

详解Java中Cookie与Session的区别

Cookie与Session的区别在Java中算是个比较重要的知识点,今天给大家总结一些:

Cookie与Session的区别

Cookie           Session

存储在客户端      存储在服务器端

两种类型          两种实现方式

※有声明周期    ※依赖于cookie
※无声明周期    ※url重写
    
父路径不能访问子路径的cookie   同一个session的窗口共享一个session
    
典型应用:         典型应用:

※3个月不用再登陆  ※用户登陆
※购物车          ※购物车也可以用session实现。
    
不可靠              可靠

    
以上表格算是对Cookie和Session的区别的大体介绍。关于Cookie和Session的单独介绍在我上几篇文章中也有。其实总体来说重点的话应该是一下两点:

1.保存位置的不同,Cookie在客户端,Session在服务器。

2.使用上:Cookie只能是子路径访问父路径设置的Cookie,而Session只要是同一套窗口就可以相互访问。

时间: 2024-08-03 08:05:41

Java web中Cookie与Session 异同总结的相关文章

关于java web 中cookie 清除 ,产生了两个同名cookie的问题

问题描述 大家好,我在做javaweb开发的时候,遇到同级域名免登录功能登录时我保存了cookie,再次访问登录页面时自动登录,但是退出时我想清除cookie这样就不会自动登录了,但是按照下面的方法结果却是多了一个同名的cookie,怎么办?求大神指点~~~!!!!!设置cookieprivatevoidsetCookie(StringremUser){/*设置cookie包括remUser开始*/Cookiepcookie;//定义remUsercookie//设置cookiepcookie=

Java中Cookie和Session的那些事儿_java

Cookie和Session都是为了保持用户的访问状态,一方面为了方便业务实现,另一方面为了简化服务端的程序设计,提高访问性能.Cookie是客户端(也就是浏览器端)的技术,设置了Cookie之后,每次访问服务端,请求中都会带上Cookie:Session是服务端技术,在服务端存储用户的访问信息. 使用Cookie传递信息,随着Cookie个数增多和访问量增大,它占用的带宽会越来越大:使用Session保存信息,最大的弱点就是不容易在多台服务器之间共享. 1 Cookie 通俗地讲,当用户使用H

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

让大家对Cookie和Session有一个更深入的了解,并对自己的开发工作中灵活运用带来启示. 一.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范.网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies . 具体来说

Java Web开发之基于Session的购物商店实现方法_java

本文实例讲述了Java Web开发之基于Session的购物商店实现方法.分享给大家供大家参考,具体如下: package cn.com.shopping; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.s

PHP中cookie和session的区别实例分析_php实例

cookie和session是PHP程序设计中非常重要的技巧.深入理解并掌握cookie和session的应用是进行PHP程序设计的基础.本文就以实例形式来分析一下二者之间的区别.具体分析如下: 1.Cookiecookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制. PHP在http协议的头信息里发送cookie, 因此 setcookie() 函数必须在其它信息被输出到浏览器前调用,这和对 header() 函数的限制类似.  1.1 设置cookie:    可以用 set

JSP学习之Java Web中的安全控制实例详解_JSP编程

本文实例讲述了JSP学习之Java Web中的安全控制.分享给大家供大家参考.具体如下: 一.目标: ① 掌握登录之后的一般处理过程: ② 能够为每个页面添加安全控制: ③ 能够共享验证代码: ④ 使用过滤器对权限进行验证: ⑤ 能够对文件的局部内容进行验证: ⑥ 掌握安全验证码的基本实现方式: ⑦ 通过异常处理增强安全性. 二.主要内容: ① 通过修改前面的登录功能,分别对管理员和普通用户的登录进行处理: ② 为管理员才能访问的页面添加控制: ③ 共享各个页面中的控制代码,使用专门的文件,然后

详解PHP中cookie和session的区别及cookie和session用法小结

具体来说 cookie 是保存在"客户端"的,而session是保存在"服务端"的 cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期时间,路径和域: 如果cookie不设置生命周期,则以浏览器关闭而关闭,这种cookie一般存储在内存而不是硬盘上.若设置了生命周期则相反,不随浏览器的关闭而消失,这些cookie仍然有效直到超过设定的过 期 时间. session 一种类似散列表的形式保存信息, 当程序需要为某个客户端的请求创建一个

Java Web中的入侵检测及简单实现

web 在Java Web应用程中,特别是网站开发中,我们有时候需要为应用程序增加一个入侵检测程序来防止恶意刷新的功能,防止非法用户不断的往Web应用中重复发送数据.当然,入侵检测可以用很多方法实现,包括软件.硬件防火墙,入侵检测的策略也很多.在这里我们主要介绍的是Java Web应用程序中通过软件的方式实现简单的入侵检测及防御. 该方法的实现原理很简单,就是用户访问Web系统时记录每个用户的信息,然后进行对照,并根据设定的策略(比如:1秒钟刷新页面10次)判断用户是否属于恶意刷新. 我们的入侵

在Java Web中的入侵检测及简单实现

一.简介 在Java Web应用程中,特别是网站开发中,我们有时候需要为应用程序增加一个入侵检测程序来防止恶意刷新的功能,防止非法用户不断的往Web应用中重复发送数据.当然,入侵检测可以用很多方法实现,包括软件.硬件防火墙,入侵检测的策略也很多.在这里我们主要介绍的是Java Web应用程序中通过软件的方式实现简单的入侵检测及防御. 该方法的实现原理很简单,就是用户访问Web系统时记录每个用户的信息,然后进行对照,并根据设定的策略(比如:1秒钟刷新页面10次)判断用户是否属于恶意刷新. 我们的入