代码编织梦想

我们需要实现下图功能
在这里插入图片描述

一,编写用户请求资源路径

@WebServlet("/indexServlet")            //使用注解方式提供资源路径
public class god1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession(false);      //判断有没有session没有的话就跳转到登录界面
        if (session==null){
            resp.sendRedirect("login.html");        //前端登录界面
        }
        }

这里我们先实现没有账号登录,我们首次登录账号情况功能实现

二,编写前端登录页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" action="login">        //提交表单后将url请求传输到该资源路径
    用户名 <input type="text" name="username">
    <br>
    密码  <input type="password" name="password">
    <br>
    <input type="submit" value="登录">
</form>
</body>
</html>

效果如下
在这里插入图片描述

注意:前端表单的提交地址为"login"资源路径

三,编写login资源路径

@WebServlet("/login")
public class god2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");   //通过HttpServletRequest 对象的getParameter方法
        String password = req.getParameter("password");
        HttpSession session = req.getSession(true);      //强制创建一个session
        if(username.equals("god")&&password.equals("skr")){   //(判断用户名和密码是否正确)这里我用的是固定的用户名和密码
        session.setAttribute("username","god");    //(给session添加对象属性,便于待会判断是否自动登录)
            resp.sendRedirect("index");    //重定向,跳转到index资源路径,也就是我们项目的主界面

        }else {
            resp.setStatus(403);   //设置错误信息
            resp.setContentType("text/html; charset=utf8");  //设置返回的文字编码格式
            resp.getWriter().write("登陆失败, 用户名或者密码错误");//提示词
        }
    }
}

四,编写index(主界面)资源

@WebServlet("/index")
public class god3 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession(false);  //获取session对象
        if(session == null){               //如果这个session为null,说明他的attribute里面没有对象属性
            resp.setStatus(403);     //报错
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("您尚未登录, 不能访问主页!");
            return;
        }
        String username = (String)session.getAttribute("username");    //获取登录用户名
        resp.setContentType("text/html; charset=utf8");
        resp.getWriter().write("欢迎来到主页! " + username);    //设置登录成功提示




        String html = "<!DOCTYPE html>" +
                "<html lang='en'>" +
                "<head>" +
                "    <meta charset='UTF-8'>" +
                "    <title>主界面</title>" +
                "    <link rel='stylesheet' href='css/1.css'>" +
                "</head>" +
                "<body>" +
                "<form method=\"post\" action=\"logout\">"+
                      "<input type='submit' value='退出'>"+
                "</form>"+                 
                "</body>" ;

        resp.getWriter().append(html);
    }
}

 

最后面那段html代码是一个退出按钮,也就是退出当前登录的账号

5,退出功能实现

退出功能不是简单的关闭页面,同时要清除缓存的session和cookie值
代码如下

@WebServlet("/logout")
public class god4 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession(false);
        if (session != null) {
            session.invalidate();   // 销毁 Session
            Cookie cookie = new Cookie("JSESSIONID", "");    // 同时销毁 浏览器的 Cookie 数据
            cookie.setMaxAge(0);
            resp.addCookie(cookie);
        }
        resp.sendRedirect("login.html");  //重定向到登录界面
    }
}

六,自动登录功能实现

还是我们的第一个用户请求资源路径indexServlet中加一些代码

@WebServlet("/indexServlet")
public class god1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession(false);      //判断有没有session没有的话就跳转到登录界面
        if (session==null){
            resp.sendRedirect("login.html");
        }else {
            String username = (String) session.getAttribute("username");  //这里是验证我们的session的对象属性中是否成功存储了god账号
            if (username.equals("god")){
                resp.sendRedirect("index");                 //验证成功直接跳转到项目主界面,不用登录      
            }
        }
    }
}

七,测试

7.1 登录功能测试

运行tomcat,进入资源路径
浏览器进入 http://localhost:8080/indexServlet
在这里插入图片描述
注意地址栏,资源路径改变,说明当前god账号没有登录,重定向成功
输入我们的账号密码 god skr
在这里插入图片描述
登录成功

7.2 自动登录功能实现

在god账号登录的同时 我们在打开一个网页进入http://localhost:8080/indexServlet
你会发现你不同登录,直接就进入到主界面了
在这里插入图片描述

7.3退出功能测试

点击退出按钮
在这里插入图片描述
重定向到登录界面
此时我们再回到第一次打开的项目主界面(index资源路径)
在这里插入图片描述
因为我们把god账号的session和cookie信息抹除了,god账号的所有页面都不能用了

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_73402102/article/details/129825541

cookie,session和localstorage,sessionstorage的区别_ynd_sg的博客-爱代码爱编程

cookie存放在客户端浏览器上,若不设置时间,则生命周期直到浏览器关闭就截止,这种cookie称为会话cookie;cookie往返于浏览器和服务器 一个cookie保存数据不能超过4k,cookie主要是保存一些字符串 浏览器访问服务器时,会检索客户端的session id,如果没有,服务器会为客户端创建一个session id,保存在cookie

缓存cookie与session的清理,cookie和session在浏览器清理缓存是发生的事件_^止境^的博客-爱代码爱编程

一。 cookie和session在浏览器清理缓存是发生的事件, 清理浏览器缓存同时清理了当前会话的session和cookie <SPAN style="FONT-SIZE: 16px">jsp清除缓存 cookie       一、清除页面缓存   在jsp页里   <%response.setHeader("Pragma","No

java中controller层清除浏览器的session和cookie_userguan的博客-爱代码爱编程_java清除浏览器cookie

/** * 退出登录清除session和cookie再跳转到登陆页面 * * @param session * @param sessionStatus * @param request * @param response * @return */ @RequestMapping("/clear") public St

cookie和sessio实现会话保持与实现登录拦截以及退出登录_ly_yanbo的博客-爱代码爱编程

一、实现会话保持 1.当用户初次登录成功的时候,记录用户信息。开启服务器sessio_start(),服务器往session空间中存数据$_SESSION[‘username’] = ‘XiaoMing’。 2.当用户第二

注销登陆 清除缓存session cas shiro redis-爱代码爱编程

内嵌系统注销,session统一注销,redis管理,单机与集群      在项目中遇到了这么一个问题,在这里记录当时解决的方式     出现的问题:系统内嵌系统,当时外系统注销用户后发现内嵌iframe的另

【Session】关于在用户退出登录的时候清除相关session信息-爱代码爱编程

在默认情况下,session对象在关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,在用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息。清除session信息主要有两种方式,一种是遍历的清除session中的所有属性,另一种是直接设置session失效,两种方式都要在退出的接口中实现,附代码: Http

SESSION和COOKIE相关原理-爱代码爱编程

cookie的工作流程: 客户端访问服务器,服务器调用response.addCookie()方法,产生响应时,会产生set-cookie响应头,将cookie文本发送给客户端,客户端会将cookie文本保存起来,当客户端再次请求服务器时,会产生cookie请求头,将之前服务器发送的cookie信息,再发送给服务器,服务器就可以根据cookie信息跟踪客户

Cookie和Session的区别以及设计测试用例-爱代码爱编程

为什么要使用Cookie和session? 首先我们要知道一个概念,web程序是使用HTTP协议传输的,而HTTP协议是无状态的协议,对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 登录前和登录后,登录前服务端给浏览器一个Cook

python中的cookie和session-爱代码爱编程

目录 Cookie1、Cookie的特点2 、cookie的基本操作Session1、Session 的作用2、 Session的特点3、启用Session4、存储方式4.1 数据库存储4.2 文件4.3 本地缓存4.4 混合存储4.5 Redis存储4.6 Django自带的sqlite存储5、Session操作 Cookie 有时也用其复

java清除session_退出页面自动清除java session方法-爱代码爱编程

在关闭页面时自动清除Session cookie,页面缓存。 在默认情况下,session对象在关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,在用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息。 清除session对象内容的主要方法如下: (1)、removeAttribute()方法。该方法是用来删

Cookie和Session-爱代码爱编程

会话  会话:用户打开浏览器,访问了一系列Web资源之后,关闭浏览器,在为了解cookie和session之前,这个过程可以称为一次会话。有状态会话:浏览器访问某个服务器上的资源,服务器会产生访问记录,下次再访问这个服务器上的资源时,服务器知道之前访问过。HTTP协议是无状态的,所以需要Cookie和Session技术来保存会话信息,跟踪会话。会话跟踪是

Java 删除session实现退出登录-爱代码爱编程

JS代码: <script src="<%=path %>/Ui/js/jquery-1.8.2.min.js"></script> //用户点击了 “退出登录”,java 清空 session $("#bu2").click(function () {