Javaweb-会话管理之Cookie

本文详细介绍了JavaWeb中Cookie的使用原理,包括其在浏览器存储信息的方式、域的概念以及相关的方法。通过实验展示了如何利用Cookie实现登录状态的判断:如果Cookie中存在登录信息,用户直接跳转到成功页面,否则需要进行登录。此外,还提到了Servlet在处理Cookie时的逻辑。参考了《JSP&Servlet学习笔记》以进一步学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用Cookie

原理:

Cookie是在浏览器存储信息的一种方式,服务器可以通过HttpServletResponse中的addCookie()设置一个cookies头添加到响应中。浏览器会将该Cookie值保存到计算机中。我们在设置Cookie时,可以设置一下Cookie的存活期限。当客户端第一次访问服务器时,服务器设置一个Cookie,客户端浏览器会保存设置 的Cookie,如果关闭浏览器,等下一次打开浏览器时如果Cookie仍在有效期中,浏览器会使用Cookie标头自动将Cookie发送给服务器,这时服务器就可以得知一些浏览器的相关信息

域:

主要的域有

name:cookie保存的名称
value:cookie的值
maxAge:cookie最大的有效期(单位:s)
comment:描述cookie的意图的
domain:cookie的域名
version:cookie 协议的版本
相关的使用方法:
//创建一个Cookie
Cookiew cookie = new Cookie(String name,String value);

//设置Cookie的最大存活时间
cookie.setMaxAge(int expiry);

//将Cookie添加到响应中
response.addCookie(cookie);

//从request中获取Cookie[]
Cookie[] cookies = request.getCookies();

二、 实验

实验内容:首先进入一个欢迎页面,然后点击登录,如果Cookie中存在登录信息则直接跳转到登录成功页面,否则进入登录页面
welcome.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome</title>
</head>
<body>
<h1>Welcome</h1>
<a href="/check.do">请先登录</a>
</body>
</html>

在浏览器中输入http://localhost:8088/welcome.html进入下面的界面
这里写图片描述
点击上面的请先登录,浏览器的URL变成http://localhost:8088/check.do
服务器根据”check.do”来查找对应的Servlet

CheckServlet.java

package httpservletresponse;

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("/check.do")
public class CheckServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        doPost(request,response);
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for(Cookie cookie:cookies){
                String name = cookie.getName();
                String password = cookie.getValue();
                if("markliwei".equals(name) && "make".equals(password)){
                    request.setAttribute("name",name);
                    request.getRequestDispatcher("/WEB-INF/success.jsp").forward(request,response);
                    return;
                }
            }
        }
        response.sendRedirect("http://localhost:8088/login.html");

    }
}

上面的逻辑是,首先从request中获取Cookie,如果我们的浏览器禁用Cookie,那么request获取的Cookie就是null;否则获取的cookie的name就是JSSONID,value是一个随机数。如果Cookie不为空,我们从Cookie中获取name和password。如果name和password和我们设置的相等,那么久住哪发到success.jsp中。否则就重定向到login.html中。
这里写图片描述
LoginServlet.java

package httpservletresponse;

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("/login.do")
public class LoginServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        doPost(request,response);
    }
    @Override
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        String name=request.getParameter("name");
        String password = request.getParameter("password");
        if(name.equals("markliwei") && password.equals("make")){
            Cookie cookie = new Cookie(name,password);
            cookie.setMaxAge(60*5);
            request.setAttribute("name",name);
            response.addCookie(cookie);
            request.getRequestDispatcher("/WEB-INF/success.jsp").forward(request,response);
        }else{
            response.sendRedirect("http://localhost:8088/login.html");
        }
    }
}

我们从request中获取name和request,如果name 和 password设置的信息一致,那么我们就将name 和 password设置到Cookie中,同时设置Cookie的一个最大存活时间。然后通过request.setAttribute设置属性;最后转发到success.jsp页面。登录不成功则重定向到login.html
这里写图片描述

参考文章

《JSP&Servlet学习笔记》-林信良

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值