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 < cookies.length; 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 <!--设置15分钟后Session自动失效-->
2 <session-config>
3   <session-timeout>15</session-timeout>
4 </session-config>

原文地址:https://www.cnblogs.com/zhihaospace/p/12310376.html

时间: 2024-08-29 04:10:22

5.Servlet的Cookie和Session的相关文章

JavaWeb之Servlet:Cookie 和 Session

会话 现实生活中我们会用手机跟对方对话,拿起手机,拨号,然后对面接听,跟着互相通话,最后会话结束. 这个过程也可以用我们的B/S模式来描述: 打开浏览器—>输入地址->发出请求->服务器收到请求->向浏览器发出响应->..重复.->关闭浏览器 这样的过程我们用 “会话” 来描述,上面就一次会话的例子. 会话管理 知道会话的概念后,我们在平时上网是否可以看到一些网页有这样的操作:当你是第一次登入这个网站,网站会发出:”欢迎来到本网站”. 然而,当你第二次登入该网站,它就会

【学习】013 Servlet、Cookie、Session的简述

Servlet核心内容 Sevlet的生命周期(重点) Servlet重要的四个生命周期方法 构造方法: 创建servlet对象的时候调用.默认情况下,第一次访问servlet的时候创建servlet对象只调用1次.证明servlet对象在tomcat是单实例的. init方法: 创建完servlet对象的时候调用.只调用1次. service方法: 每次发出请求时调用.调用n次. destroy方法: 销毁servlet对象的时候调用.停止服务器或者重新部署web应用时销毁servlet对象.

servlet中cookie和session操作

1.1 软件中的会话 一次会话: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器 登录场景: 打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问到用户主页(显示用户名) 修改密码(输入原密码) 修改收货地址 ....... 问题:在此处登录会话过程中产生的数据(用户会话数据)如何保存下来呢? 购物场景: 打开浏览器 -> 浏览商品列表  -> 加入购物车(把商品信息保存下来)  -> 关闭浏览器 打开浏览器->  直接进入购物

Servlet 之会话cookie与session

简单地说,用户打开浏览器,发送多次请求并接受到来自服务器的响应,而后关闭浏览器,整个过程称之为一次会话.在多次请求中,为了共享数据,浏览器端采用cookie技术来保存与使用数据,而服务器端则是session技术(相对于一次会话的多次请求).cookie技术不局限java,其他语言也支持.例如:php.javascript等.Javaweb中提供了javax.servlet.http.Cookie类提供了相关操作,对于服务器端的程序而言,使用cookie相关的api,只需要关注几个点: 怎么创建c

Servlet Cookie、Session

HTTP不能保持连接,可使用会话保存用户信息. 常用的会话技术有2种:Cookie.Session. Cookie 1.原理 当用户第一次访问某个网站时,服务器设置Cookie,存储用户信息,放在响应头字段中,随HTTP响应传给浏览器,浏览器把Cookie存储到本地计算机上. 当用户再次访问该网站时,浏览器先在本地计算机上查找该网站的Cookie,如果有,放在请求头中,随HTTP请求一起发送给该网站的服务器.服务器解析Cookie,获取该用户的信息,进行相关操作. 服务器可重新设置Cookie,

javaWeb基础知识----Cookie,Session

?HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的,浏览器的每一次请求都是完全孤立的 ?即使 HTTP1.1支持持续连接,但当用户有一段时间没有提交请求,连接也会关闭. ?怎么才能实现网上商店中的购物车呢:某个用户从网站的登录页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息. ?作为 web 服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态 1.会话和会话状态 ?WEB应用中的会

Cookie和Session

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向

JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解

Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) JSP简介 JSP(Java Server Pages) 与Java Servlet一样,是在服务器端执行的,不同的是JSP先由服务器编译部署成Servlet执行. JSP技术的企业最佳实践(生成HTML内容) 新的JSP2.0规范版本包括新的功能(EL表达式,新增的Simple Tag和Tag

cookie 和 session

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. 1.1  Cookie机制 在程序中,会话跟踪是很重要的事情.理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个