Cookie和Session的区别

Cookie和Session的基本概念就不说了,这边说下这二者的区别。

Cookie和Session的区别

  1. session存储在服务器端内存中(我觉得是在内存中,有的说实在文件中),当访问增多时会占用服务器的性能,它的存活时间在tomcat下默认是30分钟, sessionId存在于客户端的cookie中,cookie存储在用户本地(浏览器)中,这个是在setMaxAge(-1)的情况下,默认就是-1浏览器关闭即销毁,如果setMaxAge(正数)则将cookie数据写到硬盘中,持久化存储,并指定cookie最大存活时间,时间到期后,自动失效;

  2. session由于存储在服务器端,别人无法手动伪造,所以相对较为安全;而cookie存储在用户端,如果黑客采用一些技术截获进而编辑篡改,所以不安全

  3. session默认是HttpRequest.getSession()是获取的,同时,jsp页面会在声明上带有<%@ page session="true"%>所以也会产生session,将其改为false,则发送请求时就不会有JSESSIONID了,有些模糊的观点说是第一次访问服务器的时候,我认为这是不正确的;

  4. session没有数据大小限制,cookie可以发送的数据大小不超过4K以及同一个域名下的总的cookie数量也有限制(20个);

  5. 如果浏览器禁用了cookie,那么sessionId如何获取?可以采用url重写的方式,在路径上跟上sessionId;

  6. session什么时候被销毁?(1)服务器关闭;(2)session.invalidate();(3)session默认失效时间30分钟,当然你可以在web.xml中修改配置,这个30分钟是你没有进行任何请求的30分钟。

  7. 如果客户端关闭,服务器端不关闭,两次获取的session是同一个吗?

    • 默认情况下不是,重写打开浏览器分配到的sessionId是不一样的,如果需要设置一样,则可以创建cookie,键为JSESSIONID。
  8. 客户端不关闭,服务器端关闭,两次获取的session是同一个吗?

    • 不是,但是要确保数据不丢失,tomcat服务器会做以下工作:
    • session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上,在一个项目的work目录下或者再下一级文件,有一个session.ser的文件保存、产生。
    • session的活化:在服务器启动后,将session文件转化为内存中的session对象即可,系统会自动将上面创建的文件加载并删除。
  9. cookie共享问题,假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?

    • 默认情况下cookie是不能共享,一个项目对应一个虚拟目录,项目之间是独立的,所以cookei之间也是独立的,如果要设置cookie为共享,设置cookie的获取范围,则将path设为“/” ;
    • 不用的tomca服务器之间cookie共享问题?如果设置一级域名相同,那么多个服务区之间cookie可以共享。

10 . 多台服务器之间的session如何共享?在服务器不多的情况下可以使用session复制,比较大众化的方式是集中管理session,有一台服务器专门存储session,其他服务器想要获取session先去请求他就可以了,感觉是全局变量,唯一 一份的意思。

好了,整理了一上午,都忘记说这两者的共性就是都是属于会话技术,我也是综合了网上很多博客的一些观点,应该是足以应对面试了,可能有些观点有些理解偏差,请指出。

你可能感兴趣的:(JavaWeb,session,cookie,web,java)