会话管理的方法

2 篇文章 0 订阅

会话管理基本原理

会话管理的背景:HTTP协议是无状态的,服务器不会记得多次请求之间的关系,但是有些功能需要多次请求来完成

Cookie

cookie是一种将会话信息保存在浏览器中, 进行管理

package servlet;

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

import java.io.IOException;
@WebServlet("/index.do")
public class index extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie :
                cookies) {
            String name = cookie.getName();
            String value = cookie.getValue();
            if ("zzp".equals(name) && "123456".equals(value)) {
                req.setAttribute(name, value);
                req.getRequestDispatcher("/user.view")
                        .forward(req, resp);
                return;
            }
        }

        resp.sendRedirect("/html/login.html");
    }
}

package servlet;

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

import java.io.IOException;

@WebServlet("login.do")
public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String user = req.getParameter("name");
        String passwd = req.getParameter("passwd");
        if ("123456".equals(passwd) && user.equals("zzp")){
            String login = req.getParameter("auto");
            if ("auto".equals(login)){
                Cookie cookie = new Cookie("zzp" , "123456");
                cookie.setMaxAge(24*60*60);
                resp.addCookie(cookie);
            }
            req.setAttribute("user" ,user);
            req.getRequestDispatcher("/user.view")
                    .forward(req,resp);
        }
        else{
            resp.sendRedirect("/html/login.html");

        }
    }
}
package servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

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

@WebServlet("/user.view")
public class User extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if (req.getAttribute("user") == null){
            resp.sendRedirect("/html/login.html");
        }
        PrintWriter printWriter = resp.getWriter();
        printWriter.print(req.getAttribute("user"));
        printWriter.println("已经登录");
    }
}

HttpSession

Session进行会话管理的原理是在服务器上储存客户端的信息

package servlet;

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

import java.io.IOException;

public class see extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String user = req.getParameter("user");
        String passwd = req.getParameter("passwd");
        req.getSession().setAttribute("login" , user);
    }
}

package 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;

public class uu extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();

    }
}

原理

当运行 request 的getSession()时,web容器创建HttpSession对象,这个Session会默认存放在Cookie

中。

每次请求来到时,容器会根据发送过来的Session ID来取得对应的HttpSession

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

觅你风川间!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值