【Cookie】【session】【综合案例实现】

标签: cookie  session  javaweb  cookie  session  javaweb

登录功能实现-登录成功跳转主页面

涉及的技术知识点

  1. Cookie

  2. Session会话

  3. JSTL标签

Cookie

  1. HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出。这样的设计严重阻碍的Web程序的设计。如:在我们进行网购时,买了一条裤子,又买了一个手机。由于http协议是无状态的,如果不通过其他手段,服务器是不能知道用户到底买了什么。而Cookie就是解决方案之一。

  2. Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。

  3. Cookie的用途

    网上商城购物车

    用户登录状态的保持

  4. Cookie的限制性

    1. Cookie作为请求或响应报文发送,无形中增加了网络流量。

    2. Cookie是明文传送的安全性差。

    3. 各个浏览器对Cookie有限制,使用上有局限

    4. Cookie的默认时效就是当前浏览器的内存

  5. Cookie的具体使用

    1. 创建cookie

      在这里插入图片描述

      设置cookie的路径,默认的路径就是web应用名(context值)

    2. 读取cookie

      		Cookie[] cookies = request.getCookies();
              if(cookies != null){
                  for (Cookie cookie : cookies) {
                      System.out.println(cookie.getName()+","+cookie.getValue());
                  }
              }else{
                  System.out.println("没有收到cookie");
              }
      

      根据context路径,获取对应的cookie。就是根据服务器路径获取对应的cookie

  6. cookie案例

    @WebServlet(name = "CookieServlet",urlPatterns = "/cookieServlet")
    public class CookieServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request,response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            Cookie cookie = new Cookie("username","Admin");
            /*保存到客户端(浏览器)*/
            response.addCookie(cookie);
            /*cookie的默认时效就是在当前浏览器内存中*/
        }
    }
    

    在浏览器端输入地址,查看浏览器设置,

    在这里插入图片描述

Session

  1. 使用Cookie有一个非常大的局限,就是如果Cookie很多,则无形的增加了客户端与服务端的数据传输量。而且由于浏览器对Cookie数量的限制,注定我们不能在Cookie中保存过多的信息,于是Session出现。

  2. Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session。

  3. Session的工作原理

    1. Session的创建时机是在request.getSession()方法第一次被调用时。

    2. 注意:浏览器不关闭,cookie就不会失效,JESSIONID还在,同一个session重复使用,但是每次请求的reques对象不同,request会创建多次。

    3. Session被创建后,同时还会有一个名为JSESSIONID的Cookie被创建。

    4. 这个Cookie的默认时效就是当前会话。

    5. 简单来说,Session机制也是依赖于Cookie来实现的

  4. Session的具体使用

    在这里插入图片描述

  5. Session的时效问题

    Session默认有效时间为30分钟(浏览器每次请求的间隔),可以在服务器的web.xml配置中修改.

    在这里插入图片描述

  6. Cookie与Session的关系:

    将cookie对应成一个例子:去一个小吃店里买饭,买十次送一次,记录的原理是店家给顾客一个卡片,在上面盖章。顾客可以自制一个戳,伪造盖章。

    Session则是将这个方案改进,依旧是去买饭,买十次送一次,这时候店家自己记录次数,顾客第一次买之后,给顾客一个JSESSIONID,顾客之后吃饭报这个id,店家自己记录,这样就避免了顾客作弊的情况。但是session需要依赖cookie去传递这个JSESSIONID。

  7. 浏览器端查看设置

    在这里插入图片描述

URL重写(了解)

  1. 整个会话控制技术体系中,保持JSESSIONID的值主要通过Cookie实现。但Cookie在浏览器端可能会被禁用,所以我们还需要一些备用的技术手段,例如:URL重写。

  2. URL重写其实就是将JSESSIONID的值以固定格式附着在URL地址后面,以实现保持JSESSIONID,进而保持会话状态。这个固定格式是:URL;jsessionid=xxxxxxxxx

  3. 实现方式

    在这里插入图片描述

具体功能展示

从登录界面login.jsp跳转到主页面main.jsp,显示登陆者的账号信息。这里只给出jsp代码,

<%--
  Created by IntelliJ IDEA.
  User: kuber
  Date: 2020/10/27
  Time: 22:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主界面</title>
</head>
<body>
    <h1 align="center">欢迎<font color="red">${sessionScope.loginUser.username}</font>登录</h1>
    <br>
    <br>
    <h2 align="center">员工信息表</h2>
    <c:if test="${!empty emps}">
        <table align="center" border="1px" cellspacing="0px" width="70%">
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
                <th>部门编号</th>
                <th>部门名称</th>
                <th>部门位置</th>
                <th>操作</th>
            </tr>

        <c:forEach items="${emps}" var="emp">
            <tr align="center">
                <td>${emp.id}</td>
                <td>${emp.name}</td>
                <td>${emp.age}</td>
                <td>${emp.dept_id}</td>
                <td>${emp.department.dep_name}</td>
                <td>${emp.department.dep_location}</td>
                <td>
                    <a href="#">修改</a>
                    &nbsp;
                    <a href="#">删除</a>
                </td>
            </tr>
        </c:forEach>
        </table>
    </c:if>
    <c:if test="${empty emps}">
        <h3 align="center">没有任何员工信息</h3>
    </c:if>
    <br>
    <h2 align="center"><a href="#">添加员工信息</a></h2>

</body>
</html>

在这里插入图片描述

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