资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

JavaWeb学习指南 - Cookie和Session原理解析

Java 更新时间: 发布时间: 计算机考试归档 最新发布

JavaWeb学习指南 - Cookie和Session原理解析

文章目录

1. cookie原理解析

1.1 基本概念1.2 常用方法1.3 代码案例1.4 cookie周期1.5 cookie原理1.6 cookie的路径问题1.7 cookie的特点 2. Session概念与原理

2.1 基本概念2.2 相关方法2.3 代码案例2.4 Session生命周期2.5 Session原理2.6 Session特点

1. cookie原理解析 1.1 基本概念

cookie本意为”饼干“的含义,在这里表示客户端以“名-值”形式进行保存的一种技术。

    浏览器向服务器发送请求时,服务器将数据以Set-cookie消息头的方式响应给浏览器然后浏览器会将这些数据以文本文件的方式保存起来。当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器
1.2 常用方法

使用javax.servlet.http.cookie类的构造方法实现cookie的创建。

cookie(String name, String value) 根据参数指定数值构造对象 使用javax.servlet.http.HttpServletResponse接口的成员方法实现cookie的添加。

void addcookie(cookie cookie) 添加参数指定的对象到响应 使用javax.servlet.http.HttpServletRequest接口的成员方法实现cookie对象的获取

cookie[] getcookies() 返回此请求中包含的所有cookie对象 使用javax.servlet.http.cookie类的构造方法实现cookie对象中属性的获取和修改

String getName() 返回此 cookie 对象中的名字String getValue() 返回此 cookie 对象的数值void setValue(String newValue) 设置 cookie 的数值 1.3 代码案例

cookieServlet

package cn.knightzz.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet(name = "cookieServlet", urlPatterns = "/cookie-servlet")
public class cookieServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 创建cookie信息
        cookie cookie = new cookie("name", "Tom");
        // 2. 获取cookie的默认使用期限 单位是 秒
        int maxAge = cookie.getMaxAge();
        System.out.println("maxAge = " + maxAge);
        // 3. 修改cookie的默认使用期限
        cookie.setMaxAge(36000);
        // 4. 将cookie添加到响应信息中
        resp.addcookie(cookie);

        // 重定向到 success.html 页面
        resp.sendRedirect("success.html");
    }
}

index.jsp



	
	Index


Hello World!

Servlet Thread |
cookie




访问 index.jsp 页面 点击 cookie , 如下图所示, 在响应头和请求头携带相应的cookie

1.4 cookie周期

默认情况下,浏览器会将cookie信息保存在内存中,只要浏览器关闭,cookie信息就会消失。

int getMaxAge() 返回cookie的最长使用期限(以秒为单位)
void setMaxAge(int expiry) 设置cookie的最长保留时间(秒)

如果希望关闭浏览器后cookie信息仍有效,可以通过cookie类的成员方法实现。

        // 1. 创建cookie信息
        cookie cookie = new cookie("name", "Tom");
        // 2. 获取cookie的默认使用期限 单位是 秒
        int maxAge = cookie.getMaxAge();
        System.out.println("maxAge = " + maxAge);
        // 3. 修改cookie的默认使用期限
        cookie.setMaxAge(36000);
        // 4. 将cookie添加到响应信息中
        resp.addcookie(cookie);
1.5 cookie原理

1.6 cookie的路径问题

浏览器在访问服务器时,会比较 cookie 的路径与请求路径是否匹配,只有匹配的 cookie 才会发送
给服务器。cookie 的默认路径等于添加这个 cookie 信息时的组件路径,例如:/web-servlet-03 请求添加
了一个 cookie 信息,则该 cookie 的路径是 /web-servlet-03void setPath(String uri) 设置 cookie 的路径信息访问的请求地址必须符合 cookie 的路径或者其子路径时,浏览器才会发送 cookie 信息 1.7 cookie的特点

cookie技术不适合存储所有数据,只用于存储少量、非敏感信息,原因如下:

将状态数据保存在浏览器端,不安全。保存数据量有限制,大约4KB左右。只能保存字符串信息。可以通过浏览器设置为禁止使用 2. Session概念与原理 2.1 基本概念

Session本意为"会话"的含义,是用来维护一个客户端和服务器关联的一种技术。浏览器访问服务器时,服务器会为每一个浏览器都在服务器端的内存中分配一个空间,用于创建一
个Session对象,该对象有一个id属性且该值唯一,我们称为SessionId,并且服务器会将这个SessionId以cookie方式发送给浏览器存储。浏览器再次访问服务器时会将SessionId发送给服务器,服务器可以依据SessionId查找相对应的
Session对象 2.2 相关方法

使用javax.servlet.http.HttpServletRequest接口的成员方法实现Session的获取。

HttpSession getSession() 返回此请求关联的当前Session,若此请求没有则创建一个

使用javax.servlet.http.HttpSession接口的成员方法实现判断和获取

boolean isNew() 判断是否为新创建的SessionString getId() 获取Session的编号,唯一的属性值 sessionId

使用javax.servlet.http.HttpSession接口的成员方法实现属性的管理。

Object getAttribute(String name) 返回在此会话中用指定名称绑定的对象,如果没有对象在
该名称下绑定,则返回空值void setAttribute(String name, Object value) 使用指定的名称将对象绑定到此会话void removeAttribute(String name) 从此会话中删除与指定名称绑定的对象 2.3 代码案例

SessionServlet

package cn.knightzz.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;


@WebServlet(name = "SessionServlet", urlPatterns = "/session-servlet")
public class SessionServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 获取session
        HttpSession session = req.getSession();
        System.out.println("session.isNew() = " + session.isNew());
        System.out.println("session.getId() = " + session.getId());

        // 2. 设置session属性
        session.setAttribute("session-name", "Session");

        String attribute = (String) session.getAttribute("session-name");
        System.out.println("attribute = " + attribute);
        // 3. 设置生命周期
        int maxInactiveInterval = session.getMaxInactiveInterval();
        System.out.println("maxInactiveInterval = " + maxInactiveInterval);
        // 设置失效时间, Session对象一般是默认30分钟失效
        session.setMaxInactiveInterval(3600);
    }
}

2.4 Session生命周期

为了节省服务器内存空间资源,服务器会将空闲时间过长的Session对象自动清除掉,服务器默认
的超时限制一般是30分钟。

使用javax.servlet.http.HttpSession接口的成员方法实现失效实现的获取和设置

常用方法

int getMaxInactiveInterval() 获取失效时间void setMaxInactiveInterval(int interval) 设置失效时间

可以配置web.xml文件修改失效时间。

 
    30 

2.5 Session原理

注意 : SessionId 是 服务器和浏览器之间建立的, 而不是 Servlet对象和浏览器, 所以多个Servlet仅有一个Session对象 2.6 Session特点

数据比较安全。能够保存的数据类型丰富,而cookie只能保存字符串。Session的 Value 可以存储 Object能够保存更多的数据,而cookie大约保存4KB。数据保存在服务器端会占用服务器的内存空间,如果存储信息过多、用户量过大,会严重影响服务
器的性能。

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/704136.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【JavaWeb学习指南 - Cookie和Session原理解析】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2