文章目录

  • 会话
  • Cookie
  • Session

会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话

有状态会话:一个学生来过教室,下次再来教室,就会知道这个同学曾经来过,称之为有状态会话

一个网站,怎么证明你来过?

  1. 服务端给客户端一个信件,客户端下次访问服务器带上信件就可以了; cookie
  2. 服务器登记你来过了,下次你来的时候我来匹配你; session

保存会话的两种技术

Cookie

  • 客户端技术(响应,请求)

Session

  • 服务器技术,可以保存用户的会话信息,我们可以把信息或者数据放在Session中

Cookie

Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状

态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网

站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

打个比方,我们去银行办理储蓄业务,第一次给你办了张银行卡,里面存放了身份证、密码、手机等个人信息。当

你下次再来这个银行时,银行机器能识别你的卡,从而能够直接办理业务。

从请求中拿到cookie信息,服务器响应给客户端cookie

Cookie[] cookies = req.getCookies(); //Cookie,服务器端从客户端获取
cookie.getName();  //获得cookie的key
cookie.getValue(); //获取cookie的value值
Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期为一天
resp.addCookie(cookie);   //响应给客户端一个cookie

案例:记录用户上次访问的时间

//记录保存用户上一次访问的时间
public class Demo01Cookie extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//服务器告诉你,你来的时间,把这个时间封装成一个信件,我下次带来,就知道你来了//解决中文乱码问题req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();//Cookie,服务器端从客户端获取Cookie[] cookies = req.getCookies();//判断Cookie是否存在if (cookies!=null){out.write("你上一次访问本站的时间:");for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];//获取cookie的名字if (cookie.getName().equals("lastLoginTime")){//获取cookie的值long l = Long.parseLong(cookie.getValue());Date date = new Date(l);out.write(date.toLocaleString());}}}else {out.write("这是你第一次访问本站");}//新建立一个cookieCookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");//设置cookie的有效期为1天cookie.setMaxAge(24*60*60);//服务器给客户端响应一个cookieresp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

注册Servlet后,启动Tomcat测试:

一些细节问题:

  • cookie一般会保存在本地的用户目录 appdata下
  • 一个Cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个
  • Cookie大小有限制4kb
  • 300个cookie浏览器上限

删除Cookie:

  • 不设置有效期,关闭浏览器,自动失效
  • 设置有效期时间为0,cookie.setMaxAge(0);
//删除cookie
public class Demo02Cookie extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//新建一个cookieCookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");//设置cookie的有效期为0cookie.setMaxAge(0);//服务器给客户端响应一个cookieresp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

cookie中文乱码问题

URLEncoder.encode("胡帅","utf-8");   //编码
URLDecoder.decocde(cookie.getvalue(),"utf-8");  //解码

Session

什么是Session:

  • 服务器会给每一个用户(浏览器)创建一个Session对象
  • 一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在
  • 用户登录之后,整个网站它都可以访问,常见应用:保存购物车的信息

Session和Cookie的区别:

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存(客户端可以保存多个)
  • Session把用户的数据写到用户独占的Session中,服务器端保存(保存重要信息,减少服务器资源浪费)
  • Session对象由服务器创建

使用场景:

  • 保存一个登录用户的信息;
  • 购物车信息;
  • 在整个网站中经常会使用的数据,我们将它保存在Session中;

使用 Session:

获取Session,并向它存放数据,判断是否为新创建的,并获取一个SessionID

public class Demo03Session extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决中文乱码问题req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//从请求中得到一个SessionHttpSession session = req.getSession();//向Session存放数据session.setAttribute("username","胡帅");//读取Session的IDString sessionId = session.getId();//判断Session是不是新创建的if (session.isNew()){resp.getWriter().write("session创建成功,ID:"+sessionId);}else{resp.getWriter().write("session已经创建,ID:"+sessionId);}//Session创建的时候做了以下事情
//        Cookie cookie = new Cookie("JSESSIONID",sessionId);
//        resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

记得注册一个Servlet,路径为s1

启动Tomcat测试

只要网址后输入/s1,那么服务器就会为浏览器创建一个Session,所以第一次打开都是已经创建Session

只要浏览器不关闭,每一次的SessionID都是一样的

可以手动删除Session

//手动删除Session
public class Demo04Session extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();session.removeAttribute("username");session.invalidate();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

注册该Sevlet,路径为s2

启动Tomcat测试,输入s1获取sessionID,当输入s2删除Session后,再输入s1发现SessionID改变,创建了一个新的Session

也可以自动删除,在web.xml里面配置,1分钟后自动删除Session,并创建一个新的Session

<session-config><!--以分钟为单位,自动删除Session--><session-timeout>1</session-timeout>
</session-config>

想了解更多内容欢迎关注公众号:自定义的Vae
个人博客:https://hs-vae.com

Session和Cookie相关推荐

  1. C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie

    由于种种原因,我们有时需要从互联网上抓取一些资料,有些页面可以直接打开,而有些页面必登录之后才能打开.本文介绍的是使用 HttpWebRequest 和 HttpWebResponse 自动填写提交 ...

  2. 单点登录与权限管理本质:session和cookie介绍

    本篇开始写「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,这部分主要介绍相关的知识概念.抽象的处理过程.常见的实现框架.通过这部分的介绍,能够对单点登录与权限管理有整体上的了解,对其相关 ...

  3. session 与 cookie的区别

    session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键.基于网上一些文章和资料的参阅,及作者个人的应用体会,对这 ...

  4. html点击按钮删除session,Asp.net中安全退出时清空Session或Cookie的实例代码

    概览: 网站中点击退出,如果仅仅是重定向到登录/出页面,此时在浏览器地址栏中输入登录后的某个页面地址如主页,你会发现不用登录就能访问.这种所谓的退出并不是安全的. 那么怎样做到安全退出呢? 那就是点击 ...

  5. PHP中session和cookie的区别

    这个话题无论是系统运维还是PHP开发人员面试时会经常遇到,所以这里也进行一些总结和归纳,session和cookie的具体理论网上比较大,大家googel下均可:系统运维注意区分下session(会话 ...

  6. session和cookie的区别和联系---转载

    区别 1.存放位置: session保存在服务器,cookie保存在客户端 2.存放的形式: session是以对象的形式保存在服务器,cookie以字符串的形式保存在客户端 3.用途: sessio ...

  7. Session与Cookie区别[1][摘]

    Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间.而Se ...

  8. 服务器端会话技术Session|| Session的原理||Session的细节||session的钝化session的活化||session的特点||session与Cookie的区别

    Session 1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中.HttpSession 2. 快速入门:     1. 获取HttpSession对象:   ...

  9. YII用户注冊和用户登录(五)之进行session和cookie分析 ,并在前后区分session和cookie...

    5 进行session和cookie分析 ,并在前后区分session和cookie: 记住登录状态 这样下次再登录站点的时候.就不用反复输入username和password. 是浏览器的cooki ...

  10. Session与Cookie

    Session与Cookie 基本概念 Session 存储在服务器端,保存用户名登录状态.桌面状态等信息 默认路径在/var/lib/php/session Cookies Cookies:由服务器 ...

最新文章

  1. 【备忘】とある画像の自动生成
  2. 线程间通讯机制(提高篇)——深入浅出实现原理
  3. You C.A.N.大赛 解锁7大行业智能硬件创新密码
  4. 复变函数画图cosz图像_用matlab绘制x=(1+cosu)cosv,y=(1+cosu)sinv,z=sinu图像?
  5. 暑期社会实践服务器维护,寒假网络维护社会实践报告
  6. leetcode - 226. 翻转二叉树
  7. sqlserver 字符串转换成日期、int与varchar类型转换及保留两位小数
  8. Java的历史和学习Java需要准备的工具
  9. Python文学家为Python写的一首词?(附中英文版)
  10. Linux内核分析——Linux内核学习总结
  11. DevComponents.AdvTree 相关笔记
  12. Hadoop权威指南环境搭建+实例运行
  13. android killer 反编译工具,安卓反编译工具-Android Killer下载1.3.0.0 正式版-腾牛下载...
  14. Linux禁用搜狗输入法的简繁切换快捷键
  15. 4.3.1 管道翻模
  16. 不需要邮箱 修改Gitlab账号密码(亲测可用)
  17. android在体检报告叫什么,体检报告助手app下载-体检报告助手v3.1.5 安卓版-腾牛安卓网...
  18. mysql根据表的一个字段决定去关联(join)那张表格
  19. 如何在海量数据中查找最相似的topk样本
  20. 二选一选择器-verilog

热门文章

  1. 欧尼酱讲JVM(13)——本地方法栈
  2. 单片机烧录问题 单片机安装驱动问题
  3. 腾讯/阿里/百度 BAT人才体系的职位层级、薪酬、晋升标准
  4. 控制面板是微型计算机,微型计算机中,控制器的基本功能是什么
  5. 数据结构第二版(朱昌杰版)栈和队列习题3答案(纯附手写笔记图)
  6. 嵌入式linux usb wifi移植[s3c6410平台原创]
  7. 计算机应用基础综合实训目录10,计算机应用基础综合实训指导书2016
  8. 安装安卓(Android)x86系统
  9. win7 Synergy 安装失败
  10. 6个高效办公的Excel小技巧,让你事半功倍