首页 > 编程知识 正文

cookie和session的作用和区别,javacookie和session

时间:2023-05-04 09:19:41 阅读:284647 作者:618

文章目录 Cookie简介Session简介原理写入Session列表服务器生成并发送Cookie客户端接收并发送Cookie从Session列表中查找

Cookie简介

Cookie是1993年由网景公司(Netscape)前雇员发明的一种进行网络会话状态跟踪的技术。

会话是由一组请求与响应组成是围绕着一件相关事情所进行的请求与响应。所以这些请求与响应之间一定是需要有数据传递的即是需要进行会话状态跟踪的。然而HTTP协议是一种无状态协议,在不同的请求间是无法进行数据传递的。此时就需要一种可以进行请求间数据传递的会话跟踪技术而Cookie就是一种这样的技术。

cookie是由服务器生成保存在客户端的一种信息载体。这个载体中存放着用户访问该站点的会话状态信息。只要Cookie没有被清空或者 Cookie没有失效那么保存在其中的会话状态就有效。

用户在提交第一次请求后由服务器生成Cookie并将其封装到响应头中,以响应的形式发送给客户端。客户端接收到这个响应后将cookie 保存到客户端。当客户端再次发送同类请求后在请求中会携带保存在客户端的Cookie 数据发送到服务端由服务器对会话进行跟踪。

Cookie技术并不是JavaWeb开发专属技术而是属于web开发的技术是所有web开发语言均支持的技术。Cookie是由若干键值对构成这里的键一般称为name值称为value。Cookie 中的键值对均为字符串。

WebServlet(name Servlet1, value /Servlet1)public class Servlet1 extends HttpServlet { Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 生成Cookie Cookie cookie1 new Cookie(username, 外向的钢笔); Cookie cookie2 new Cookie(password, 123);// 添加到响应体 response.addCookie(cookie1); response.addCookie(cookie2); response.sendRedirect(/studentweb/Servlet2); }} WebServlet(name Servlet2, value /Servlet2)public class Servlet2 extends HttpServlet { Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取服务端是不用存储Cookie的 Cookie[] cookies request.getCookies(); for (Cookie c : cookies) { System.out.println(c.getName() c.getValue()); } response.getWriter().print(获取cookie); }} Session简介

Session,即会话是 web开发中的一种会话状态跟踪技术。前面的Cookie也是一种会话跟踪技术。不同的是cookie是将会话状态保存在了客户端而Session则是将会话状态保存在了服务器端

“会话”是当用户打开浏览器从发出第一次请求开始一直到最终关闭浏览器就表示一次会话的完成。

Session并不是Javaweb开发所特有的,而是整个web开发中所使用的技术。在JavaWeb开发中Session是以javax.servlet.http.HttpSession的接口对象的形式出现的。

WebServlet(name Servlet1, value /Servlet1)public class Servlet1 extends HttpServlet { Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Session创建 HttpSession httpSession request.getSession(true); httpSession.setAttribute(username, 外向的钢笔); response.sendRedirect(/studentweb/Servlet2); }} WebServlet(name Servlet2, value /Servlet2)public class Servlet2 extends HttpServlet { Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Session获取 // 获取时候设置为false当获取不到Session时不新建一个Session HttpSession httpSession request.getSession(false); String username null; if (httpSession ! null) { username (String) httpSession.getAttribute(username); } response.getWriter().print(username); }} 原理

在服务器中系统会为每个会话维护一个 Session。不同的会话对应不同的session。

写入Session列表

服务器对当前应用中的Session是以Map 的形式进行管理的,这个Map称为 session列表。该Map的 key为一个32位长度的随机串,这个随机串称为JSSESSIONID , value则为 session对象的引用。当用户第一次提交请求时服务端servlet中执行到request.getsession()方法后会自动生成一个 Map.Entry对象key为一个根据某种算法新生成的JSessionIDvalue则为新创建的HttpSession对象。

服务器生成并发送Cookie

在将session信息写入Session列表后系统还会自动将“JSSESSIONID”作为name这个32位长度的随机串作为value以cookie的形式存放到响应报头中并随着响应将该Cookie发送到客户端。

客户端接收并发送Cookie

客户端接收到这个Cookie 后会将其存放到浏览器的缓存中。即只要客户端浏览器不关闭浏览器缓存中的Cookie就不会消失。当用户提交第二次请求时(为了保证第二次请求是该会话中Cookie存了JSSESSIONID和资源路径)会将缓存中的这个Cookie伴随着请求的头部信息一块发送到服务端。

从Session列表中查找

服务端从请求中读取到客户端发送来的cookie,并根据cookie的JSSESSIONID的值,从Map中查找相应 key所对应的value即session对象。然后对该Session对象的域属性进行读写操作。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。