一、会话技术简介

1.存储客户端的状态

例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态。会话技术是帮助服务器记住客户端状态(或者说区分客户端,是张三登录的还是李四登录的)

2.会话技术

从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。

会话技术分为Cookie和Session:

Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookie

Session:将数据存储到服务器端,安全性相对好,增加服务器的压力

二、Cookie技术

Cookie技术是将用户的数据存储到客户端的技术,我们分为两方面学习:

第一,服务器端怎样将一个Cookie发送到客户端

第二,服务器端怎样接受客户端携带的Cookie

1.服务器端向客户端发送一个Cookie

  1)创建Cookie:

   Cookie cookie = new Cookie(String cookieName,String cookieValue);

   示例:Cookie cookie = new Cookie("username","zhangsan");

   那么该cookie会以响应头的形式发送给客户端:Set-Cookie:"name=zhangsan"

   注意:Cookie中不能存储中文

  2)设置Cookie在客户端的持久化时间 :

      cookie.setMaxAge(int seconds); ---时间秒

      注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里

   示例:cookie.setMaxAge(10*60);

   设置cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器自动删除该cookie信息

  3)设置Cookie的携带路径:

   cookie.setPath(String path);

   注意:如果不设置携带路径,那么该cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息

   示例:cookie.setPath("/WEB16");----代表访问WEB16应用中的任何资源都携带cookie

      cookie.setPath("/WEB16/cookieServlet");----代表访问WEB16中的cookieServlet时才携带cookie信息

  4)向客户端发送cookie:

   response.addCookie(Cookie cookie);

  5)删除客户端的cookie:

   如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时间为0的cookie进行覆盖即可

2.服务器端怎么接受客户端携带的Cookie

cookie信息是以请求头的方式发送到服务器端的:

  1)通过request获得所有的Cookie:

   Cookie[] cookies = request.getCookies();

  2)遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie

   for(Cookie cookie : cookies){

    if(cookie.getName().equal(cookieName)){

      String cookieValue = cookie.getValue();

    }

  }

3. 案例:显示用户的上次访问时间

具体代码实现:

  1. public class LastAccessTimeServlet extends HttpServlet {
  2.  
  3. public void doGet(HttpServletRequest request, HttpServletResponse response)
  4. throws ServletException, IOException {
  5. //获得当前时间
  6. Date date=new Date();
  7. SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  8. String currentTime=format.format(date);
  9.  
  10. //1、创建一个cookie,记录当前最新的访问时间
  11. Cookie cookie=new Cookie("lastAccessTime", currentTime);
  12. cookie.setMaxAge(60*10*500);
  13. response.addCookie(cookie);
  14.  
  15. //2、获得客户端携带的cookie-----lastAccessTime
  16. String lastAccessTime=null;
  17. Cookie[] cookies=request.getCookies();
  18. if(cookies!=null){
  19. for(Cookie coo:cookies){
  20. if("lastAccessTime".equals(coo.getName())){
  21. lastAccessTime=coo.getValue();
  22. }
  23. }
  24. }
  25. response.setContentType("text/html;charset=UTF-8");
  26. if(lastAccessTime==null){
  27. response.getWriter().write("您是第一次访问!");
  28. }else{
  29. response.getWriter().write("您上次访问的时间是"+lastAccessTime);
  30. }
  31.  
  32. }
  33.  
  34. public void doPost(HttpServletRequest request, HttpServletResponse response)
  35. throws ServletException, IOException {
  36. doGet(request, response);
  37. }
  38. }

Servlet学习(七)——cookie的更多相关文章

  1. 重温Servlet学习笔记--Cookie对象

    首先要了解cookie必须得先了解http协议,,Cookie是http协议指定的,先由服务器保存cookie到浏览器,在下次浏览器请求服务器时把上次请求得到的cookie归还给服务器,cookie以 ...

  2. Servlet的学习之Cookie

    从本篇开始学习Servlet技术中的Cookie专题. 首先来了解什么是“会话”.会话是web技术中的一个术语,可以简单的理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭 ...

  3. JSP&Servlet学习手册

    JSP&Servlet学习手册 沙琪玛 书 目录 JSP 指令... 3 书写方式... 3 指令列表... 3 JSP 内置对象... 3 内置对象特点... 3 常用内置对象... 3 o ...

  4. day 85 Vue学习七之vue-cookie

      Vue学习七之vue-cookie   通过vue如何操作cookie呢 参考链接:https://www.jianshu.com/p/535b53989b39 第一步:安装vue-cookies ...

  5. # jsp及servlet学习笔记

    目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...

  6. Servlet 学习(六)

    会话 1.定义 一般意义会话:指两人以上的对话(多用于学习别种语言或方言时) 计算机中的会话:客户端和服务器的通讯 web客户端 A ------>Tomcat web客户端 B ------& ...

  7. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  8. JavaScript学习08 Cookie对象

    JavaScript学习08 Cookie对象 JavaScript Cookie Cookie对象: Cookie是一种以文件的形式保存在客户端硬盘的Cookies文件夹中的用户数据信息(Cooki ...

  9. HTTP协议 (七) Cookie

    HTTP协议 (七) Cookie Cookie是HTTP协议中非常重要的东西, 之前拜读了Fish Li 写的[细说Cookie], 让我学到了很多东西.Fish的这篇文章写得太经典了. 所以我这篇 ...

随机推荐

  1. Oracle学习系类篇(一)

    1.表空间介绍 oarcle数据库真正存放数据的是数据文件(data files),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data fi ...

  2. 腾讯测试工程师:你以为会打LOL就能做测试了?

    周日参加完公司团建,回家路上拼到一个IT界的老司机,他和几个朋友组件团队承接开发项目,知道我是做测试的,问了我一个问题: “你们大公司的测试都做什么?” “测试应该不好模仿吧?” 刚开始我也不清楚他的 ...

  3. 关于C++程序运行程序是出现的this application has requested the runtime to terminate it in an unusual way. 异常分析

    今天运行程序是出现了this application has requested the runtime  to terminate it in an unusual way. 的异常报告,以前也经常 ...

  4. CorelDRAW X6最新注册激活机制

    最近购买CorelDRAW X6的小伙伴可能对如何注册激活软件存在疑惑,下面小编一步步教您如何快速激活CorelDRAW X6. CorelDRAW X6最新注册机制如下: 1.关注“Corel服务中 ...

  5. Java以流的方式将指定文件夹里的.txt文件全部复制到另一文件夹,并删除原文件夹中所有.txt文件

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  6. make 编译 linux 内核是单线程的任务 才用-j4命令使用4 线程加速

    今天使用 make 编译 linux 内核,发现CPU只用了30%多一点,而我的电脑是4核的,所以如果没有意外的话,make 编译 linux 内核的任务是用单线程做的. 又了解到,使用-j4参数可以 ...

  7. C语言基本语法——函数

    1.什么是函数 2.函数语法 3.函数声明 4.函数调用 5.函数的形参与实参 6.return与exit关键字 7.递归函数 1.什么是函数 • 函数就是一连串语句被组合在一起,并指定了一个名字 • ...

  8. vue2.0变化(转载)

    原文链接:https://www.cnblogs.com/itbainianmei/p/6062249.html 1.每个组件模板template,不再支持片段代码 之前: <template& ...

  9. windows下的ubuntu

    办公用Windows确实方便,但对于开发和学习还是用Linux比较好. 在Windows下安装Linux子系统 windows10中推出了Linux子系统,这个功能对开发和学习来说真的很好,非常方便. ...

  10. tomcat闪退无法启动 the catalina_home environment variable is not defined correctly this environment variable is needed to run this program

    未成功配置CATALINA_HOME 1.计算机>属性>环境变量, 新建环境变量.变量名为CATALINA_HOME ,变量值tomcat的解压目录,注意后面不用多加“\”或者“;” 2. ...