Cookie 和 Session 工作流程(1)

| 方法 | 描述 |

| — | — |

| void addCookie(Cookie cookie) | 把指定的 cookie 添加到响应中. |

响应中就可以根据 addCookie 这个方法来添加一个 Cookie 信息到响应报文中,这里添加进来的键值对,就会作为 Http 响应中的 Set-Cookie 字段来表示。

HttpSession 类中的相关方法

| 方法 | 描述 |

| — | — |

| Object getAttribute(String name) | 该⽅法返回在该 session 会话中具有指定名称的 对象,如果没有指定名称的对象,则返回 null |

| void setAttribute(String name, Object value) | 该⽅法使⽤指定的名称绑定⼀个对象到该 session 会话 |

| boolean isNew() | 判定当前是否是新创建出的会话 |

  • HttpSession

这个对象本质上也是一个“键值对”结构,允许程序员往 HttpSession 对象中储存任意的键值对结构(key 必须是 String,value 是一个 Object)

在这里插入图片描述

  1. HttpSession 对象里面包含了若干键值对,里面的 key 和 value 都是程序员自定义的。

  2. HttpSession 里面的每个键值对,称为 属性(Attribute).。

  3. HeepSession 提供了两个方法:

    getAttribute :取键值对。

    setAttribute :存键值对。

Cookie 类中的相关方法

| 方法 | 描述 |

| — | — |

| String getName() | 该方法返回 cookie 的名称。名称在创建后不能改 变。(这个值是 Set-Cooke 字段设置给浏览器的) |

| String getValue() | 该方法获取与 cookie 关联的值 |

| void setValue(String newValue) | 该方法设置与 cookie 关联的值。 |

补充用法注意事项:

Cookie 这里是可以保存任意的键值对,包括用户自定义的键值对,所以在获取键值对时,如果是一般的键值对,直接通过 getCookies 来获取。如果是特殊的键值对(保存 sessionId 的键值对),直接用 getSession 来自动的帮我们从 Cookie 中取 sessionId 了。

实现登录案例交互:

图例分析:

在这里插入图片描述

约定前后端交互接口:

  • 登录 + 获取主页

    在这里插入图片描述

  1. 编写一个简单的登陆页面:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>用户登录系统</title>

    <script src="js/jquery-1.9.1.min.js"></script>

</head>

<body>

<div style="margin-top:50px;margin-left:40%;">

    <h1 style="padding-left:50px;">用户登录</h1>

    姓名:<input id="username" type="text" >

    <p>

        密码:<input id="password"  type="password" >

    <p>

    <div style="padding-left:50px;">

<!--                                                      提交事件-->

        <input type="button" value=" 提 交 " onclick="mySubmit()"> &nbsp;&nbsp;&nbsp;

        <input type="reset" value=" 重 置 ">

    </div>

</div>

<script>

    // ajax 请求登录

    function mySubmit(){

        // 非空效验

        var username = jQuery("#username");

        var password = jQuery("#password");

        if(""==jQuery.trim(username.val())){

            alert("请先输入用户名!");

            username.focus();

            return;

        }

        if(""==jQuery.trim(password.val())){

            alert("请先输入密码!");

            password.focus();

            return;

        }

        jQuery.ajax({

            url:"login", // 设置请求地址

            type:"POST", // 设置请求方法类型

            contentType:"application/x-www-form-urlencoded; charset=utf-8", // 请求类型

            // dataType:"", // 响应的类型

            data:{"username":username.val(),"password":password.val()}, // 请求参数

            success:function(data){

                alert(data);

            }

        });

    }

</script>

</body>

</html>



  1. 登录逻辑

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.IOException;



@WebServlet("/login")

public class LoginServlet extends HttpServlet {

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 处理用户请求

        String username = req.getParameter("username");

        String password = req.getParameter("password");

        // 判定用户名或者密码是否正确~~

        // 正常来说这个判定操作是要放到数据库中进行存取的.

        // 此处为了简单, 就直接在代码里写死了. 假设有效的用户名和密码是 "admin", "123"

        if ("admin".equals(username) && "123".equals(password)) {

            // 登录成功!

            // 创建会话, 并保存必要的身份信息.

            HttpSession httpSession = req.getSession(true);

            // 往会话中存储键值对. 必要的身份信息

            httpSession.setAttribute("username", username);

            // 初始情况下, 把登录次数设为 0

            httpSession.setAttribute("count", 0);

            resp.sendRedirect("index");

        } else {

            // 登录失败!

            resp.getWriter().println("login failed!");

        }

    }

}



  1. 主页逻辑



### 最后

**文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。**

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值