首页 > 其他分享 >Cookie和Session

Cookie和Session

时间:2022-09-27 11:22:11浏览次数:53  
标签:jakarta resp req Session Cookie import servlet

一个网站,怎么证明你来过?

客户端 --- 服务端

  1. 服务端给客户端一个 信件,客户端下次访问服务端带上信件就可以了; cookie

  2. 服务器登记你来过了,下次你来的时候我来匹配你; seesion

CookieDemo类代码:

package com;

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.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class CookieDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求和响应的编码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");

//请求一个Cookie,返回数组类型,说明Cookie可以有多个
Cookie[] cookies = req.getCookies();

//一个Cookie对象
Cookie cookie = new Cookie("name", URLEncoder.encode("管",
StandardCharsets.UTF_8));//对Value值编码

//设置Cookie存活周期,不设置有效期,关闭浏览器,自动失效; 设置有效期时间为 0 响应给浏览器后立马消失;
cookie.setMaxAge(60*2);

if (cookies != null) {
resp.getWriter().write("Cookie");
resp.getWriter().write("key:"+cookie.getName()+",");//获取Cookie的Key值
resp.getWriter().write("value:"+URLDecoder.decode(cookie.getValue(),
StandardCharsets.UTF_8));//对获取到的Value值解码、输出
} else {
resp.getWriter().write("这是你第一次访问");
}
resp.addCookie(cookie);//响应一个Cookie
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
碰到的问题案例

 

 顺序应该是:接受到Cookie请求---创建一个Cookie对象---对Cookie进行赋key、值---将Cookie响应回服务器


web.xml配置文件代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">

<servlet>
<servlet-name>CookieDemo</servlet-name>
<servlet-class>com.CookieDemo</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>CookieDemo</servlet-name>
<url-pattern>/cookiedemo</url-pattern>
</servlet-mapping>
</web-app>


遇见的问题:在设置了编码解码的情况下页面依旧显示乱码,idea后台输出不乱码

说明浏览器编码问题,edga浏览器为例;

解决:修改浏览器的编码

 Session

什么是Session:

  • 服务器会给每一个用户(浏览器),创建一个Session对象;

  • 一个Session独占一个浏览器,只要浏览器页面没有关闭,这个Session就存在;

  • 用户登录之后,整个网站他都可以访问的!→保存用户的信息,保存购物车的信息。。。

 

Session跟Cookie的区别:

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存

  • session 把用户的数据写到用户独占Session 中,服务器端保存(保存重要的信息,减少服务器资源的浪费)

  • Session对象由服务器对象创建;

 

使用场景:

  • 保存一个登录用户的信息;

  • 购物车信息;

  • 在整个网站中经常会使用的数据,我们将他保存在Session中;

 sessiondemo代码:

package com;

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;

public class SessionDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//获取session
HttpSession reqSession = req.getSession();
//获取session的 id
String sessionId = reqSession.getId();
//往session存数据
reqSession.setAttribute("name","管");
//判断session是否为新建的
if(reqSession.isNew()){
//输出session的ID、Value
resp.getWriter().write("session创建成功,ID:"
+sessionId
+reqSession.getAttribute("name").toString()
);
}
else {
resp.getWriter().write("session已存在,ID:"
+sessionId
+reqSession.getAttribute("name").toString()
);
}

}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
会话自动过期demo:
package com;

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;

public class demo02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取session
HttpSession reqSession = req.getSession();
//移除session属性
reqSession.removeAttribute("name");
//使session失效
reqSession.invalidate();

}

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

web.xml设置

 

 

更详细的见解可以借鉴
https://www.cnblogs.com/l199616j/p/11195667.html#_label1_2

标签:jakarta,resp,req,Session,Cookie,import,servlet
From: https://www.cnblogs.com/mo-de/p/16730748.html

相关文章

  • day02 cookie管理器
    1、添加默认请求头2、配置好http请求:get请求和路径/cookie/set,添加参数:uesr:uesername3、添加配置元件-cookie管理器4、添加结果树5、提交请求,查看结果树,get请求体里面,......
  • token和session
    前言在介绍token和session之前,我们先了解一下无状态。http协议是一种无状态的协议,就是说服务器没有记忆能力,无法记住客户端之前有没有发送过请求,因此,客户端每次发送的......
  • Cookie和Session的关系和区别
    4.请简述Cookie和Session的区别4.1什么是CookieHTTP是无状态协议,他不能以状态来区分和管理请求和响应。也就是说服务器但从网络连接上无从知道客户身份。所以服务端给每......
  • 服务器使用cookie传递用户信息而不是用session保存用户信息的原因
    服务器部署在多台机器上所以session在多台机器之间不是共享的所以对于单点登录来说登陆完之后会将用户的信息放在cookie中这样在请求接口的时候就会把cookie带到服务......
  • 今日部分知识点总结———SQL注入,hooks的优缺点,cookies,xxxStorage的区别,BFC,合并二叉
    SQL注入在浏览器页面用户提交数据处,输入特定的字符实现sql语句的篡改,从而对数据库进行操作。比如在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录;用户名......
  • Mybatis的SqlSession把Java Map作为参数
    Mybatis的以下方法,可以有一个参数,也可以有两个参数。如果有两个参数,则第一个参数为SQL语句;第二个参数是Object。sqlSession.insert("insertCar",carMap);以上的"inser......
  • 浏览器有哪些缓存?localStorage、sessionStorage、cookie的、session的区别是什么?
    浏览器的缓存机制提供了可以将用户数据存储在客户端的方式,可以利用cookie,session等跟服务器端进行数据交互1.保存方式cookie保存在浏览器端session保存在服务器端2.......
  • 存储数据 cookie localStorage和sessionStorage区别和使用
     三者主要是从三方面区分存储大小,生命周期和安全性1.cookie存储的数据小,在4KB左右生命周期,默认会话结束,可以设置有效期安全性,存储的数据在浏览器的隐私模式下......
  • vue记住账号密码(cookie)
    //安装npminstall--savejs-base64//引入constBase64=require('js-base64').Base64<template><formclass="main"><!--账号--><di......
  • token能放在cookie中吗
     能、不设置cookie有效期、重新登录重写cookie覆盖原来的cookie token,也称为令牌,一般是用来判断用户是否登录的,它内部包含的信息有:uid(用户唯一的身份标识)、tim......