热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:5.Servlet的Cookie和Session

本文由编程笔记#小编为大家整理,主要介绍了5.Servlet的Cookie和Session相关的知识,希望对你有一定的参考价值。一.会话两种
本文由编程笔记#小编为大家整理,主要介绍了5.Servlet的COOKIE和Session相关的知识,希望对你有一定的参考价值。



一.会话

两种技术:




  • COOKIE:客户端技术




  • Session:服务器技术




常见应用:网站登录之后下一次就可以不再登录。


1.COOKIE


使用步骤:




  1. 服务器从客户端获取COOKIE信息




  2. 服务器设置COOKIE信息返回给客户端




COOKIE案例:服务器获取并设置COOKIE


1 public class COOKIEDemo01 extends HttpServlet {
2
3 @Override
4 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
5 req.setCharacterEncoding("utf-8");
6 resp.setCharacterEncoding("utf-8");
7 resp.setContentType("text/html; charset=utf-8");
8
9 PrintWriter out = resp.getWriter();
10
11 //服务器从客户端获取COOKIE
12 COOKIE[] COOKIEs = req.getCOOKIEs();
13
14 if (COOKIEs != null) {
15 out.write("你上一次访问的时间是:");
16
17 for (int i = 0; i ) {
18 COOKIE COOKIE = COOKIEs[i];
19
20 //判断COOKIE的名字
21 if (COOKIE.getName().equals("lastLoginTime")) {
22 //获取COOKIE的值
23 long lastLoginTime = Long.parseLong(COOKIE.getValue());
24
25 Date date = new Date(lastLoginTime);
26
27 out.write(date.toLocaleString());
28 }
29 }
30 } else {
31 out.write("这是您第一次访问");
32 }
33
34 //服务器给客户端响应一个COOKIE
35 COOKIE COOKIE = new COOKIE("lastLoginTime", System.currentTimeMillis() + "");
36
37 //设置COOKIE的有效期为1天
38 COOKIE.setMaxAge(24 * 60 * 60);
39 resp.addCOOKIE(COOKIE);
40 }
41
42 @Override
43 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
44 doGet(req, resp);
45 }
46 }


COOKIE常用函数:


1 COOKIE[] COOKIEs = req.getCOOKIEs(); //获取COOKIE
2 COOKIE.getName(); // 获取COOKIE的key
3 COOKIE.getValue(); //获取COOKIE的value
4 new COOKIE("lastLoginTime", System.currentTimeMillis() + "");//新建一个COOKIE
5 COOKIE.setMaxAge(24 * 60 * 60); //设置COOKIE的有效期
6 resp.addCOOKIE(COOKIE); //浏览器返回给客户端一个COOKIE


注意事项:




  1. 一个COOKIE只能保存一个信息




  2. 一个web站点可以给浏览器发送多个COOKIE但是最多存放20个COOKIE




  3. COOKIE大小限制为4kb




  4. 300个COOKIE是浏览器的上限




删除COOKIE:




  • 方法1:不设置COOKIE的有效期,关闭浏览器后COOKIE自动失效




  • 方法2:设置浏览器有效期为0




删除COOKIE时,必须先建立一个和需要删除的COOKIE有一样的键值的COOKIE


1 //服务器给客户端响应一个COOKIE
2 COOKIE COOKIE = new COOKIE("lastLoginTime", System.currentTimeMillis() + "");
3
4 //设置COOKIE的有效期为1天
5 COOKIE.setMaxAge(24 * 60 * 60);
6 resp.addCOOKIE(COOKIE);


对于中文乱码问题:使用编码和解码


1 COOKIE = new COOKIE("name",URLEncoder.encode("你好!","utf-8"))
2 out.write(URLDecoder.decode(COOKIE.getValue(),"utf-8"));


2.Session(重点)


(1)什么是Session




  • 服务器会给每一个用户(浏览器)创建一个Session对象




  • 一个session独占一个浏览器,只要浏览器没有关闭,这个Session就一直存在




  • 用户登录之后,整个网站都可以访问这个Session(用于保存用户信息,保存购物车的信息)




(2)Session和COOKIE的区别




  • COOKIE:服务器将数据保存在浏览器上,浏览器保存,可创建多个




  • Session:服务器将数据保存在服务器上用户独占Session,只有一个




(3)Session的使用场景




  • 保存一个登录用户的信息




  • 保存购物车信息




  • 保存在整个网站中经常使用的数据




(4)使用:


SessionDemo01:获得和设置Session


1 public class SessionDemo01 extends HttpServlet {
2
3 @Override
4 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
5 //解决中文乱码问题
6 req.setCharacterEncoding("utf-8");
7 resp.setCharacterEncoding("utf-8");
8 resp.setContentType("text/html; charset=utf-8");
9
10
11 //得到Session
12 HttpSession session = req.getSession();
13
14
15 //设置Session
16 session.setAttribute("name",new Person("小王",24));
17
18 //获取Session的ID
19 String sessiOnId= session.getId();
20
21 //判断session是不是新建的
22 if (session.isNew()){
23 resp.getWriter().write("session创建成功,ID:"+sessionId);
24 }else{
25 resp.getWriter().write("session已经在服务器中存在,ID:"+sessionId);
26 }
27
28
29
30 }
31
32 @Override
33 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
34 doGet(req, resp);
35 }
36 }


SessionDemo02:跨Servlet访问Session


1 public class SessionDemo02 extends HttpServlet {
2
3 @Override
4 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
5
6 //解决中文乱码问题
7 req.setCharacterEncoding("utf-8");
8 resp.setCharacterEncoding("utf-8");
9 resp.setContentType("text/html; charset=utf-8");
10
11 //得到Session
12 HttpSession session = req.getSession();
13
14 Person person = (Person) session.getAttribute("name");
15
16 resp.getWriter().write("获得person:" + person);
17 }
18
19 @Override
20 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
21 doGet(req, resp);
22 }
23 }


SessionDemo03:手动删除Session


1 public class SessionDemo03 extends HttpServlet {
2
3 @Override
4 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
5 HttpSession session = req.getSession();
6
7 session.removeAttribute("name");
8
9 //手动注销Session:注销之后就没有之前的那个Session但是会立即创建一个新的Session
10 session.invalidate();
11 }
12
13 @Override
14 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
15 doGet(req, resp);
16 }
17 }


也可以在web.xml中设置Session的自动失效时间


1
2
3 15
4

 


推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
author-avatar
世卍界创意驿站肀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有