cookie和session的原理以及在Servlet中的应用 | 您所在的位置:网站首页 › 能够用于获取客户端所有cookie对象的方法是 › cookie和session的原理以及在Servlet中的应用 |
文章目录
简介cookiecookie的实质及实现原理cookie在Servlet的应用
sessionsession的实质及实现原理session在Servlet中的应用HttpServletRequest,Session,ServletContext
![]() cookie保存在客户端,session保存在服务器端。二者均用于描述会话的状态。服务器端可以创建多个cookie对象响应到客户端并保存在客户端;浏览器客户端在发送请求时自动携带对应请求路径下的所有cookie信息供服务器响应使用。服务器端也可以获取每个客户端对应的唯一的一个session对象,并取得该对象中的某些属性用来验证用户的非法操作,这里只是大概讲一下二者的地位。 cookie cookie的实质及实现原理 cookie实际上是浏览器的一种相对持久化存储的机制,优化了Http通信协议的无状态特性带来的缺陷,极大地提高了用户体验感比如,某sdn、某讯视频可以在用户第一次登陆时选择保存用户的登录信息,在某段时间内用户可以在进入该网页时直接实现自动登录的效果。极大地优化了用户的体验。这是因为有我们账户对应的cookie信息存储在本地硬盘,当我们操控客户端向对应的服务器发送请求时,会自动发送这个已经保存的cookie信息,服务器接收并且验证了这个信息才使的我们能够实现客观上“免登录”的效果。 cookie为我们浏览器访问硬盘文件提供了一种有效途径浏览器为了电脑的安全性,禁止js代码访问本地磁盘的数据。而cookie机制为浏览器访问硬盘文件提供了手段,也就有了持久化存储一说。 cookie可以由服务器创建多个,然后响应给客户端并根据需求保存在客户端的运行内存或者硬盘空间上,在用户发送向服务器端发送请求时,客户端会自动将带有cookie的请求信息发送,服务器端识别解析这个cookie信息进行响应操作。例如,客户端在首次登录成功时,服务器创建了两个分别包含用户名和用户密码的cookie信息,并响应存储在了客户端的内存或者硬盘空间上。如果存储在内存中,那么就可以实现客户端在一次会话的过程中多次打开网站自动登录的效果;如果存储在硬盘空间并设置了生效时间,那么客户端在这段时间内都不论是否进行同一次会话都可以实现自动登录的效果。极大地优化了用户体验。如果一个常规网站在每次打开时都提示用户进行登录,这回是多么让客户抓狂的一件事!cookie的功能原理图如下,拿用户免登录来说: 只要是做web开发,不论是什么编程语言,cookie机制都是必不可少的。不论是客户端还是服务器,发送的cookie样式都是键值对形式,服务器获取到的name或者value都是字符串形式 cookie在Servlet的应用 服务器端创建cookie对象 Cookie cookie = new Cookie(String name,String value); //Cookie类只提供了这一种形式的构造方法 服务器端设置cookie对象的生命周期和关联路径。 cookie.setMaxAge(int second); //设置cookie的生命周期的参数是以秒为单位的。 //例如,设置一个cookie的生命周期为10天,可以设置参数为60*60*24*10 cookie.setPath(String url); /*当服务器端将cookie对象相应保存到客户端时,当客户端发送在这里设置的请求 在这里设置的请求路径时,会自动将与该路径相关的所有cookie信息包含在请求体中发送给服务器关于服务器端设置cookie对象的生命周期 cookie.setMaxAge(second > 0):cookie对象存活second秒,客户端接收cookie对象后存储在本地磁盘上cookie.setMaxAge(second = 0):删除这个cookie对象cookie.setMaxAge(second < 0):存储这个cookie对象到浏览器内存上,在一次会话中生效,当浏览器窗口关闭后这个cookie也就失效了 服务器端响应设置生命周期和路径后的cookie对象到客户端,将cookie对象存储在客户端的内存或者硬盘空间上 response.addCookie(Cookie var); 服务器端接收客户端发送过来的cookie信息 Cookie cookies[] = request.getCookies(); //返回客户端发送的该路径下的所有cookie信息关于服务端获取客户端发送的cookie信息 服务端通过请求对象的getCookies()获取客户端发送请求路径下对应的所有的cookie信息,返回的是一个cookie数组。如果没有获取到客户端的任何cookie信息,则返回null,并不会创建一个长度为0的cookie数组返回 session session的实质及实现原理 session对象是存储在服务器端的,本质上是服务器端共享数据的一种机制。一次会话对应一个session对象。多次会话对应多个session对象。在服务器端可以向这个session对象中添加属性,本次回话中所有的请求都会共享这个session对象 在web容器中,sessioon其实是以类似map集合的形式存储的,多个客户端发送请求会对应不同的session对象,类似于map集合的key值上存储的是该session对象的sessionid,这个sessionid会以cookie的形式响应到客户端进行存储;类似于map集合的value存储的是key值对应的具体的session对象。web容器中seesion的实现原理如下图:![]() ![]() 关于服务器端创建/获取session对象 服务器端通过HttpServletRequest对象的getSession对象创建/获取session对象。当用户第一次在会话中发送请求时, 给用户对应会话在服务器端并没有session对象,这是getSession()方法会为该用户创建一个session对象。当用户非第一次发送请求时,getSession方法会返回该用户对应的session对象。 三者都可以作为数据域共享的工具,那么有什么不同呢? 首先是HttpServletRequest,又称为请求域,用于请求级别的数据共享请求对象的生命周期很短,当一次请求结束后这次请求对象也就被销毁了,请求域中的数据也就不存在了,这种数据域的共享方式常用于不同请求转发之间 其次是Session,又称为会话域,是用户级别的一个用户的一次会话对应一个session对象,这个session对象中添加的数据在这次会话中不论哪次请求都可以被共享。不同用户的会话对应不同的session,每一个session对象是被个体客户所关联的 最后是ServletContext,又称为应用域,是项目级别的向ServletContext对象中添加的共享数据域是整个项目,所有客户端所共享的 三者域的大小关系 HttpServletRequest < Session < ServletContext三者的使用原则 尽量使用小的域 |
CopyRight 2018-2019 实验室设备网 版权所有 |