Session+Cookie实现登录认证

news/2024/5/18 16:10:08 标签: 登录认证, cookie, session

使用 Session 和 Cookie 实现登录认证的流程通常包括以下步骤:

1. 登录认证流程

  1. 用户登录:

    用户在登录页面输入用户名和密码。
    服务器验证用户的凭证(用户名和密码)是否正确。

  2. 创建会话(Session):

    在用户验证成功后,服务器创建一个会话,为该用户生成一个唯一的会话标识(Session ID)。
    服务器将用户信息保存在会话中,比如用户 ID、角色等。

  3. 设置 Cookie:

    服务器将该会话标识(Session ID)发送给客户端,通常以 Cookie 的形式。
    Cookie 在客户端被存储,通常是在浏览器的内存中。

  4. 保持会话状态:

    每次用户与服务器进行交互时,浏览器会将 Cookie 中的会话标识发送给服务器。
    服务器根据会话标识找到对应的会话,确定用户的身份和权限。

  5. 访问控制和身份验证:

    服务器根据会话中存储的用户信息来进行访问控制和身份验证,决定用户是否有权访问特定资源或执行特定操作。

2. 使用 Servlet 和 HttpSession 的简单示例

登录处理(LoginServlet):

@WebServlet("/login")
public class LoginServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 假设有一个UserService类处理用户认证
        if (UserService.authenticate(username, password)) {
            HttpSession session = request.getSession();
            session.setAttribute("username", username);

            // 设置Cookie
            Cookie sessionCookie = new Cookie("sessionId", session.getId());
            sessionCookie.setMaxAge(60 * 60); // 设置 Cookie 有效时间
            response.addCookie(sessionCookie);

            response.sendRedirect("dashboard.jsp"); // 登录成功后重定向到用户仪表盘页面
        } else {
            // 处理登录失败的逻辑
            response.sendRedirect("login.jsp?error=1");
        }
    }
}

访问控制(DashboardServlet):

@WebServlet("/dashboard")
public class DashboardServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession(false); // 如果会话不存在则返回 null
        if (session != null && session.getAttribute("username") != null) {
            // 用户已经登录,允许访问仪表盘
            // 业务逻辑处理
            response.getWriter().println("Welcome to the dashboard!");
        } else {
            response.sendRedirect("login.jsp"); // 如果未登录,重定向到登录页面
        }
    }
}

这是一个简单的示例,实际应用中可能会更加复杂。安全性和保护用户数据的问题也需要仔细考虑,比如采用 HTTPS 加密通信、防范会话劫持和其他安全漏洞。


http://www.niftyadmin.cn/n/5147899.html

相关文章

Spring底层原理(六)

Spring底层原理(六) 本章内容 介绍AOP的实现方式、JDK代理的模拟实现与源码 AOP的实现方式 使用代理模式 jdk动态代理cglib动态代理 使用aspectj的编译器,该编译器会直接对字节码进行修改,可以实现静态方法增强 使用javaagent,在jvm option中指定-…

vue回到顶部组件

组件代码 <!--返回顶部组件--> <template><transition :name"transitionName"><divv-show"visible":style"customStyle"class"back-to-ceiling"click"backToTop"><svgwidth"16"heigh…

构建mono-repo风格的脚手架库

前段时间阅读了 https://juejin.cn/post/7260144602471776311#heading-25 这篇文章&#xff1b;本文做一个梳理和笔记&#xff1b; 主要聚焦的知识点如下&#xff1a; 如何搭建脚手架工程如何开发调试如何处理命令行参数如何实现用户交互如何拷贝文件夹或文件如何动态生成文件…

Python接口自动化测试(接口状态)

本节开始&#xff0c;开始介绍python的接口自动化测试&#xff0c;首先需要搭建python开发环境&#xff0c;到https://www.python.org/下载python 版本直接安装就以了&#xff0c;建议 下载python2.7.11版本&#xff0c;当然&#xff0c;也是可以下载python最新版本的。 接口测…

约数之和 (简单+普通)

目录 简单 输入格式 输出格式 数据范围 输入样例&#xff1a; 输出样例&#xff1a; 普通 输入格式 输出格式 数据范围 输入样例&#xff1a; 输出样例&#xff1a; 简单 给定 n 个正整数 ai&#xff0c;请你输出这些数的乘积的约数之和&#xff0c;答案对 1097 取…

安全与HTTP协议:为何明文传输数据成为争议焦点?

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、H…

windows 使用 EasyScreenLive 和 EasyDarwin 软件实现相机 rtsp 推流

1. 下载软件 实现 rtsp 推流&#xff0c;需要运行&#xff08;1&#xff09;rtsp 服务器、&#xff08;2&#xff09;rtsp 推流客户端。 rtsp 服务器 EasyDarwin&#xff1a;https://github.com/EasyDarwin/EasyDarwin rtsp 推流客户端 EasyScreenLive&#xff1a;https://git…

【实践篇】一次Paas化热部署实践分享 | 京东云技术团队

前言 本文是早些年&#xff0c;Paas化刚刚提出不久时&#xff0c;基于部门内第一次Paas化热部署落地经验所写&#xff0c;主要内容是如何构建一些热部署代码以及一些避雷经验。 一、设计-领域模型设计 1.首先&#xff0c;确定领域服务所属的领域 2.其次&#xff0c;确定垂直…