IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Javaweb10==一次/多次会话中的多次请求间实现数据共享。cookie 和session -> 正文阅读

[系统运维]Javaweb10==一次/多次会话中的多次请求间实现数据共享。cookie 和session

? ? ? ? 在之前的jsp列表获取中,我们都是一收到请求就去数据库里查询记录,然后写到页面。但如果是一个商城,我们一开始登录,输入账号和密码,浏览器将账号和密码POST发送到web服务器,loginServlet中判断后,将是否匹配成功和将账号密码一起放入域对象再转发到显式商品列表的show.jsp,show.jsp从域对象中获取是否匹配成功和信息和账号密码后,再带着账号和密码去请求showServlet,showServlet再从域对象中取出账号密码,经过判断后返回该用户有权限看到的数据到show.jsp,此时用户看到了他这个账号密码对应的数据了。可以看到这中间有多次取出域对象,存入域对象的操作,非常繁琐。

? ? ? ? 采用cookie客户端会话技术简化上述操作,用户第一次访问某个站点:协议+IP+端口时,如果账号密码匹配,servlet会生成一个cookie对象携带一些特殊方式加密过的信息放在响应头中响应给前端,浏览器帮助用户自动保存cookie,并且在用户下一次请求同一个协议+IP+端口时(比如在同一标签页中点购物车,或者再新开一个标签页点购物车),浏览器自动将cookie放在请求头中带到对应的servlet。但是浏览器是将它存储的所有站点的cookie都带到对应的servlet。

? ? ? ? 示例如下:第一次访问带着原有的cookie去服务器,服务器新建一个cookie返回。第二次访问,浏览器自动将第一次返回的cookie放在了请求头中带往服务器,服务器通过getCookies()获得所有cookie的数据,经过删选看到了第一次给出去的cookie。

TestAddCookie
package com.ldj;

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("/testAddCookie")
public class TestAddCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //发送cookie
        //1创建cookie独享,暂时未加密
        Cookie cookie = new Cookie("username", "zs");
        //2发送cookie
        resp.addCookie(cookie);
    }

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

?

?TestGetCookie

package com.ldj;

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("/testGetCookie")
public class TestGetCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取cookie,暂时未解密
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            String name = cookie.getName();
            if ("username".equals(name)) {
                String value = cookie.getValue();
                System.out.println(name + "======" + value);
            }
        }

    }

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

? ? ? ? ?默认cookie的保留时间是浏览器关闭就销毁,服务器响应cookie的时候可以设置cookie在浏览器上保留的时间,cookie.serMaxAge()

?

===========================================================

服务端会话技术session。

从上,我们可以看出,虽然账号密码在cookie中传递,是经过加密解密的,但在传递肯定就不安全,要尽量减少传递次数。所以采用session,只在第一次请求时,浏览器将账号密码带到服务器,服务器根据浏览器信息账号密码等生成一个session,这个session对应一个ID,这个session存在服务器中,ID放在响应头中以cookie的形式返回给浏览器保存。浏览器下一次发起HTTP请求时候,会带着这个ID访问服务器,服务器servlet会根据ID找出存在服务器上对应的session,就可以从session中获取出账号密码进行后续的判断等。

这个ID全名:JSESSIONID

?

服务器未关闭的时间内,session是存在内存中的,默认30分钟销毁session对象。

钝化活化:如用tomcat作为web服务器,服务器关闭后session会自动落盘,下次开启服务器会读取落盘的数据,并且将盘中数据全部删除,下次关闭再自动落盘。由于session生成时也根据浏览器的状态信息,所以浏览器重启的话,有可能服务端根据ID找到的session经过一些判断会被丢弃,需要重新生成session?

================================================?

?cookie和session

?

=======================================================================

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章           查看所有文章
加:2021-11-01 11:48:49  更:2021-11-01 11:49:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:31:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码