JavaWeb之Servlet:Cookie 和 Session

会话

现实生活中我们会用手机跟对方对话,拿起手机,拨号,然后对面接听,跟着互相通话,最后会话结束。

这个过程也可以用我们的B/S模式来描述:

          打开浏览器—>输入地址->发出请求->服务器收到请求->向浏览器发出响应->..重复.->关闭浏览器

这样的过程我们用 “会话” 来描述,上面就一次会话的例子。

会话管理

知道会话的概念后,我们在平时上网是否可以看到一些网页有这样的操作:当你是第一次登入这个网站,网站会发出:”欢迎来到本网站”。 然而,当你第二次登入该网站,它就会发出:”欢迎再次回来”。 为什么服务器会知道我们已经登入过该页面呢?无错,就是在与服务器会话的过程中产生了一些数据,而这些数据被保存下来,服务器根据这些数据来判断你是否登陆过该页面,而输出不同欢迎标语。

下面就来学习两门会话信息管理技术:

      Cookie技术: 会话数据保存在浏览器客户端。

      Session技术:会话数据保存在服务器端。

Cookie技术

什么是Cookie技术:

一种会话数据管理技术,该技术把会话数据保存在浏览器客户端。

那么Cookie技术的原理是什么,它是如何工作的呢?

1)首先浏览器向服务器发出请求。

2)服务器就会根据需要生成一个Cookie对象,并且把数据保存在该对象内。

3)然后把该Cookie对象放在响应头,一并发送回浏览器。

4)浏览器接收服务器响应后,提出该Cookie保存在浏览器端。

5)当下一次浏览器再次访问那个服务器,就会把这个Cookie放在请求头内一并发给服务器。

6)服务器从请求头提取出该Cookie,判别里面的数据,然后作出相应的动作。

Cookie的体验

知道了Cookie的原理后,我们就用它来实现一些功能吧~

从它的原理中,我们知道Cookie是在服务器端创建的,那么我们在Servlet中创建一个Cookie对象吧:

public class cookieTest extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {

        Cookie cookie = new Cookie("name", "value");
    }

}

Cookie的构造方法接收两个参数,第一个参数是该要传递的数据的名字,第二个是该数据的值。

然后我们把这个Cookie加到响应头,发送给浏览器吧~

Cookie cookie = new Cookie("name", "value");
        response.addCookie(cookie);

这样一个Cookie就发送给浏览器了,我们在浏览器看看发过来的响应头:

有一个Set-Cookie的请求头,它保存了我们设置的信息。

然后我们用浏览器再次访问该Servlet,看看它的请求头:

可以看到,浏览器会把这个Cookie信息发过去服务器。

那么服务器收到这个请求后,如何得到该Cookie里的数据呢?

我们可以这样做:

Cookie cookie = new Cookie("name", "value");
        response.addCookie(cookie);

        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(Cookie c: cookies){
                String name = c.getName();
                String value = c.getValue();
                System.out.println(name+"="+value);
            }
        }else{
            System.out.println("没有cookie信息");
        }

调用request.getCookies()方法,返回一个Cookie数组,然后遍历它把里面的内容取出来吧!

Cookie常用方法

1)创建Cookie对象

Cookie(java.lang.String name, java.lang.String value)

2)设置Cookie对象

setPath(java.lang.String uri)     --设置cookie的有效路径,就是指定该Cookie访问哪个资源时会传过去,访问其他资源则就不会传。

setMaxAge(int expiry)             --设置cookie的有效时长,以秒为单位

setValue(java.lang.String newValue)   --设置cookie的值

3)发送cookie信息到浏览器

response. addCookie(Cookie cookie)

4)接收浏览器发送的cookie信息

Cookie[] getCookies()

Cookie细节

1)设置cookie的有效路径: setPath(路径) 。把cookie设置到某个路径下,那么浏览器在该路径下访问服务器时就会带着cookie信息到服务器;否则,就不会带着Cooke信息到服务器。

2)设置cookie的有效时长: setMaxAge(整数)。

正整数: 表示cookie数据保存在浏览器的缓存区中(硬盘中),以秒为单位。例如,10: cookie在10秒之后失效!

负整数: 表示cookie数据保存在浏览器的内存区中。关闭浏览器cookie就会失效!

零: 表示删除同名的cookie数据

3)设置cookie的值: setValue(值)

4)cookie保存的会话数据类型必须是字符串的。浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

5)cookie不适合保存敏感数据(例如密码)

Session技术

什么是Session技术:

一种会话数据管理技术,该技术把会话数据保存在服务器端。

同样都是会话数据管理技术,为什么我们要发明Session技术呢?

我们先分析一下Cookie的局限性:

        1)Cookie数据类型都是String,且容量有限制的。

        2)Cookie不适合保存敏感数据

所以,Session技术可以解决这两种情况。

那么Session技术的原理是什么,它是如何工作的呢?

1)浏览器发出请求到服务器。

2)服务器会根据需求生成Session对象,并且给这个Session对象一个编号,一个编号对应一个Session对象

3)服务器把需要记录的数据封装到这个Session对象里,然后把这个Session对象保存下来。

4)服务器把这个Session对象的编号放到一个Cookie里,随着响应发送给浏览器

5)浏览器接收到这个cookie就会保存下来

6)当下一次浏览器再次请求该服务器服务,就会发送该Cookie

7)服务器得到这个Cookie,取出它的内容,它的内容就是一个Session的编号!!!

8)凭借这个Session编号找到对应的Session对象,然后利用该Session对象把保存的数据取出来!

Session的体验

下一面我们就在Servlet内创建一个Session吧:

public class sessionTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpSession session = request.getSession();
        session.setAttribute("name", "Rime");
    }
}

这样当浏览器请求这个Servlet服务时,就会把这个session发过去啦~,我们来看看服务器收到的响应头吧!

可以看到服务器给浏览器发出了一个 Set-Cookie 的响应头,里面有一个JSESSIONID!没错,这个就是Session的编号了!

然后我们再次访问这个Servlet吧!

浏览器会把保存这个JSESSIONID的cookie发送过去服务器~那么服务器接收这个session编号,然后取出这个编号对应的数据吧!!

    //得到数据
        String name = (String)session.getAttribute("name");

        System.out.println("name="+name);

然后看到输出结果:

name=Rime

这样就服务器就可以根据这个name的值来根据需要做出一些动作了~

Session的API

学习HttpSession

1)创建/得到HttpSession对象

    HttpSession request.getSession()

    HttpSession request.getSession(boolean create)

2)HttpSession作为域对象保存会话数据

    void setAttribute(java.lang.String name, java.lang.Object value)  保存数据

    java.lang.Object getAttribute(java.lang.String name)     得到数据

    void removeAttribute(java.lang.String name)  清除数据

3)session细节:

    java.lang.String getId()  得到session对象的编号

    void setMaxInactiveInterval(int interval)   设置session对象的有效时长

    void invalidate()      销毁session对象

Session细节

1)得到session编号: getId()

2)session对象生命周期:

  2.1 session对象什么创建?

      执行request.getSession()方法时

  2.2 session对象什么销毁?

      1)默认情况下,session对象在30分钟之后服务器自动销毁。

      2)手动设置session有效时长

      void setMaxInactiveInterval(int interval) -以秒为单位。

3)配置session的有效时长(统一配置)

4)手动销毁

      void invalidate()

3)getSession方法的使用

      getSession(true) / getSession() : 创建或得到session对象。如果得不到session对象,创建 新的session对象。主要是用于创建session对象的。

      getSession(false)     :得到session对象。如果得不到session对象,返回null。主要用于判断是否可以得到session对象的。

4)session编号的cookie过期时间:

      默认情况下,cookie是在浏览器关闭时失效!!!

      修改cookie的有效时长:

      setMaxAge(正整数);

时间: 2024-08-29 10:57:26

JavaWeb之Servlet:Cookie 和 Session的相关文章

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

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

Servlet Cookie、Session

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

(javaweb读书笔记系列之四)cookie和session

Cookie 1. Http协议与Cookie(了解) * Cookie是HTTP协议制定的!先由服务器保存Cookie到浏览器,再下次浏览器请求服务器时把上一次请求得到Cookie再归还给服务器 * 由服务器创建保存到客户端浏览器的一个键值对!服务器保存Cookie的响应头:Set-Cookie: aaa=AAA  Set-Cookie: bbb=BBB > response.addHeader("Set-Cookie", "aaa=AAA");respon

JavaWeb:Cookie和Session

JavaWeb:Cookie和Session Cookie处理 什么是Cookie Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息.Java Servlet 显然支持 HTTP Cookie. 识别返回用户包括三个步骤: 服务器脚本向浏览器发送一组 Cookie.例如:姓名.年龄或识别号码等. 浏览器将这些信息存储在本地计算机上,以备将来使用. 当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookie 信息发送到服务器,服务器将使用这些信息来识别用户.

JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)

1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatcher("/secondServlet"); request.setAttribute("pwd","123");//这里设置的值在secondServlet中可以获取到 dispatcher.forward(request, response);//调

JavaWeb系列之八(Cookie&Session)

 1.jsp的入门 jsp就是一个servlet,终于会被编译成servlet,jsp:java server pages,java服务器端页面,包括html+java+jsp的指令 使用servlet向页面输出内容,须要使用字节流或者字符流向页面输出 jsp:java server pages.java服务器端的页面 运行过程:放到tomcat work文件夹,在訪问的时候,会编译成servlet. 嵌入java代码的三种方式 第一种: <%! int num=10 %>:表示的一个是成

JavaWeb之Cookie和Session的区别

Cookie和Session的区别 一.cookie机制和session机制的区别 ************************************************************************************* 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存

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

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

javaWeb核心技术第八篇之Cookie和Session

会话技术: 会话是什么? 浏览器和服务器交互,浏览器打开网页访问服务器,会话开始,正常交互. 浏览器关闭,会话结束. 会话能干什么? 会话可以共享数据. Cookie和session将数据保存在不同的位置 进行数据共享 Cookie入门案例 1.创建一个cookie对象 a. Cookie cookie = new Cookie(String name,String value); 2.响应给浏览器 a.Response.addCookie(cookie) 3.再次请求时需要获得cookie a

servlet中cookie和session操作

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