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 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Cookie和session -> 正文阅读

[JavaScript知识库]Cookie和session

会话?

什么是会员?
比如你打开一个浏览器,在浏览器中做了很多的事情,使用完之后关闭浏览器。
而这个过程我们叫做一次会话。
有状态会话:
比如你去商场办了一个会员,你怎么向商场证明你是这个商场的会员呢?
你------------>商场 出示会员卡
商场--------->你 在他们的会员系统中查

上面的是现实中的例子,下面我们举个网路中的例子。我们将你比作客户端,将商场比作服务端。

  • 服务端会给客户端发一个证件,下次来的时候带上这个证件就可以了,这个证件就是cookie
  • 服务端会登记客户端的信息,下次来的时候直接匹配就可以了。

保存会话的两种技术

  • Cookie
    客户端技术,主要是对响应请求

  • Session
    服务端技术,利用这个技术可以保存用户的会话信息。

常见的案例有,目前大部分网站登录功能,比如bilibili,你已经登录过了,则你到bilibili的任何一个页面都不需要重新登录。

Cookie

package com.mrli.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

public class CookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码,解决乱码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        //响应输出流
        PrintWriter out = resp.getWriter();

        //从请求中获得Cookie,但是Cookie不一定只有一个,所以是一个数组
        Cookie[] cookies = req.getCookies();

        //判断Cookie是否存在
        if(cookies!=null){
            //如果存在,遍历Cookie数组,如果有我们想要的cookie则获取到,然后响应给客户端
            for (Cookie cookie : cookies) {
                if(cookie.getName().equals("lastLocalTime")){//getName(),拿到Cookie的key
                    long lastLocalTime = Long.parseLong(cookie.getValue());//将时间戳变成一个长整型
                    Date date = new Date(lastLocalTime);//从字符串中解析一个时间

                    out.write("您上一次访问的时间是:"+date.toString());//将时间写入到响应对象
                }
            }
        }else{
            //如果Cookie不存在
            out.write("您是第一次访问本站");
        }

        //如果有Cookie则更新,没有则添加
        Cookie cookie = new Cookie("lastLocalTime", System.currentTimeMillis() + "");
        cookie.setMaxAge(60*60*24);//设置cookie的有限期,以分钟为单位
        resp.addCookie(cookie);
    }

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

Cookie的上限

  • 一个Cookie只能保存一个信息,键值对
  • 一个网站最多向浏览器发送20个Cookie,浏览器最多存300个Cookie
  • 一个Cookie大小限制为4kb

删除Cookie

  • 将有效期设置为0
  • 不设置有限期,关闭浏览器自动失效

编码解码

URLEncoder.encode();//编码
URLDecoder.decode();//解码

Session

Session是什么?

Session被称为“会话控制”,服务器会为每一个用户(浏览器)创建一个Session对象,Session可以用来保存会话的信息。
只要不关闭浏览器,Session就会一直存在

Session和Cookie的区别

Cookie是将信息保存在浏览器上。(可以保存多个)
Session是将信息保存在服务器上。(用于保存重要的信息,但是也不要过多,尽量减少服务器资源的额占用)
Session对象是由服务端创建的。

利用Session保存信息

package com.mrli.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;
import java.io.PrintWriter;

public class SessionDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        PrintWriter out = resp.getWriter();

        HttpSession session = req.getSession();
        String sessionid = session.getId();
        session.setAttribute("mrli",new Person("mrli",19));
        if(session.isNew()){
            out.write("这个session是新创建的");
        }else{
            out.write("这个session已经在服务器上存在了,ID:"+sessionid);
        }
    }

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

然后我们就可以通过别的网站直接去获取

req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");

PrintWriter out = resp.getWriter();

HttpSession session = req.getSession();

out.write(String.valueOf((Person)session.getAttribute("mrli")));

删除信息

session.removeAttribute("mrli");


注销Session

第一种方法

session.invalidate();

第二种方法
在web.xml中设置Session的失效时间,但是关闭浏览器还是会被注销

  <session-config>
<!--    设置Session的失效时间,以分钟为单位-->
    <session-timeout>15</session-timeout>
  </session-config>

在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 18:50:47  更:2022-01-30 18:51:26 
 
开发: 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/24 14:03:44-

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