web 会话机制之 session cookie 详解( 二 )


package com.github.houbb.simple.servlet;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;import java.io.PrintWriter;/** * @author binbin.hou * @since 0.0.2 */@WebServlet("/cookie/get")public class CookieGetServlet extends HttpServlet {    private static final long serialVersionUID = 491287664925808862L;    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {        // 实际的逻辑是在这里        PrintWriter out = resp.getWriter();        Cookie[] cookies = req.getCookies();        if(cookies != null) {            for(Cookie cookie : cookies) {                out.println(cookie.getName()+"="+cookie.getValue()+"");            }        }    }}删除cookie 是非法直接删除的,一般都是首先获取,然后设置 maxAge 为 0 。
package com.github.houbb.simple.servlet;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;import java.io.PrintWriter;/** * 清空 * @author binbin.hou * @since 0.0.2 */@WebServlet("/cookie/clear")public class CookieClearServlet extends HttpServlet {    private static final long serialVersionUID = 491287664925808862L;    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {        for(Cookie cookie : req.getCookies()) {            // 立刻失效            cookie.setMaxAge(0);            cookie.setPath("/");            resp.addCookie(cookie);        }        resp.setContentType("text/html;charset=utf-8");        resp.setCharacterEncoding("UTF-8");        PrintWriter out = resp.getWriter();        out.println("<a href=https://www.isolves.com/it/cxkf/bk/2021-01-07/'/cookie/add'>添加 cookie 信息"); }}session

web 会话机制之 session cookie 详解

文章插图
 
session
说明session的实现原理是建立在给浏览器回写cookie,并且是以 JSESSIONID 为键,但是这个cookie是没有时间的,也就是说,当你关闭浏览器时,代表一个会话结束了,也就是说你的session会被删除,当你再次访问服务器的时候,服务器会为你重新创建一个session 。
添加添加 session 属性的方式也比较简单,直接使用 req.getSession().setAttribute("name", "session"); 即可 。
package com.github.houbb.simple.servlet;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;/** * @author binbin.hou * @since 0.0.2 */@WebServlet("/session/add")public class SessionAddServlet extends HttpServlet {    private static final long serialVersionUID = 491287664925808862L;    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {        // 只有在 getSession 的时候,才会设置对应的 JSESSIONID        req.getSession().setAttribute("name", "session");        resp.setContentType("text/html;charset=utf-8");        resp.setCharacterEncoding("UTF-8");        PrintWriter out = resp.getWriter();        // 后端会根据页面是否禁用 cookie,选择是否将 sessionId 放在 url 后面        String url = resp.encodeURL("/session/get");        out.println("<a href=https://www.isolves.com/it/cxkf/bk/2021-01-07/'"+url+"'>获取 session 信息


推荐阅读