Cookie和Session的API、登录页面

这篇具有很好参考价值的文章主要介绍了Cookie和Session的API、登录页面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Cookie 和 Session

1、HttpServletRequest 类中的相关方法

2、HttpServletResponse 类中的相关方法

3、HttpSession 类中的相关方法

4、Cookie 类中的相关方法

二、网页登录

1、约定前后端交互接口

2、编写一个简单的登录页面

3、编写一个Servlet 来处理这个登录请求。

4、编写服务器端返回主页的逻辑

5、效果展示


一、Cookie 和 Session

        在请求响应(header)中介绍过。HTTP详细介绍

        在Servet 中,对于 Cookie 和 Session 都有很好的支持,因此就可以通过这些API来完成会话管理的操作。以下介绍几个核心方法。

1、HttpServletRequest 类中的相关方法

方法 描述
HttpSession getSession()

在服务器中获取会话。

参数若为 true,则当不存在会话时新建会话

参数若为false,则当不存在会话时返回 null。

Cookie[] getCookies()

返回一个数组,包含客户端发送该请求的所有 Cookie 对象。

会自动把 Cookie 中的格式解析成键值对。

在调用 getSession 时具体做的事情:

(1)创建会话

        首先先获取到请求中 cookie 里面的 session 字段(相当于会话的身份标识),判定这个 session 是否在当前服务器上存在,如果不存在,则进入创建会话逻辑。

        创建会话,会创建一个 HttpSession 对象,并且生成一个 session(是一个很长的数字,通常用十六进制来表示,能够保证唯一性), 接下来就会把这个 session 作为 key,把这个 HttpSession 对象作为 value ,把这个键值对给保存到 服务器内存 的一个 “ 哈希表 ” 这样的结构中。(实际的实现不一定真是哈希表,但是一定是类似的能存储键值对的结构,并且这个数据是在内存中的)

(2)获取会话

        先获取到请求中的 cookie 里面的 session 字段(也就是会话的身份标识),判定这个 session 是否在当前服务器上存在(也就是在这个哈希表中是否有),如果有,就直接查询出这个 HttpSession 对象,并通过返回值返回。

getCookie

        返回值是一个 Cookie 类型的数组,每个元素是一个 Cookie 对象,每个 Cookie 对象有包含了两个属性 name 和 value 。(还是键值对)

        Http 请求中的 cookie 字段就是按键值对的方式在组织的,这里的键值对使用 来分割多个键值对,使用 = 来分割键和值。 这些键值对都会在请求中通过 cookie 字段传给服务器,服务器收到请求后,就会进行解析,解析成上述看到的 Cokkie[] 这样的形式。

2、HttpServletResponse 类中的相关方法

方法 描述
void addCookie(Cookie cookie) 把指定的 cookie 添加到响应中

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

3、HttpSession 类中的相关方法

        一个 HttpSession 对象里包含多个键值对(key:String;value:Object),我们可以往 HttpSession 中存任何我们需要的信息。

Cookie和Session的API、登录页面

方法 描述
Object getAtttribute(String name)

该方法返回在该 session 会话中具有指定名称的对象。

如果没有指定名称的对象,则返回 null

(取键值对)

void setAttribute(String name, Object value)

该方法使用指定的名称绑定一个对象到该 session 对象

(存键值对)

boolean isNew()

判断当前是否是新创建出的会话

4、Cookie 类中的相关方法

        每个Cookie 对象就是一个键值对。

方法 描述
String getName()

该方法返回 cookie 的名称。

名称在创建后不能改变(这个值是 Set-Cookie 字段设置给浏览器的)

String getValue() 该方法获取与 cookie 关联的值
void setValue(String newValue) 该方法设置与 cookie 关联的值

Cookie 这里是可以保存任意自定制的键值对的。

如果是一般的键值对,直接通过 getCookies 来获取。

如果是特殊的键值对(表示 session 的键值对),不需要使用 getCookies,直接使用 getSession 就自动帮我们从 Cookie 中取 session 了。

二、网页登录

        先创建 Servlet 项目,并创建好目录。

Cookie和Session的API、登录页面

1、约定前后端交互接口

        有两组交互:登录,获取主页

登录的交互:

请求:

POST/login HTTP/1.1

Content-Type:application/x-www-form-urlencoded

username=zhangsan&password=123

响应:

HTTP/1.1 302

Location:index

获取主页的交互:

请求:

GET/index HTTP/1.1

响应:

HTTP/1.1 200 OK

Content-Type:text/html

[ body 中时一个简单的 html 片段,直接有浏览器进行展示] 

2、编写一个简单的登录页面

        使用 form 表达来构造post请求。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>登录</title>
</head>
<body>
    <form action="login" method="post">
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="submit" value="登录">
    </form>

</body>
</html>

3、编写一个Servlet 来处理这个登录请求。

loginServlet.java:

处理第一个登录交互的请求。保证跳转到主页(index)的时候,服务器要能够获取到当前用户的身份信息,因此要创建好一个 Session 对象,并填入身份信息。

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;

/**
 * Created with IntelliJ IDEA.
 * Description:实现登录页面
 * User: WangWZ
 * Date: 2023-05-05
 * Time: 15:57
 */
@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");
        //判定用户名和密码是否正确
        //正常来说这个判定操作是要放在数据库中进行存取的
        //此处为了简单,就直接在代码里写死了,假设有效的用户名和密码是:“zhangsan” 和 “123”
        if ("zhangsan".equals(username) && "123".equals(password)) {
            //登录成功!
            //创建会话,并保存必要的身份信息
            HttpSession httpSession = req.getSession(true);
            //往会话中存储键值对,必要的身份信息
            httpSession.setAttribute("username",username);
            httpSession.setAttribute("count",0);
            resp.sendRedirect("index");
        } else {
            //登录失败!
            resp.getWriter().Writer("登录失败!");
        }
    }
}

4、编写服务器端返回主页的逻辑

IndexServlet.java:

        第二次交互。

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;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WangWZ
 * Date: 2023-05-05
 * Time: 17:25
 */
@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //返回一个主页(主页就是一个简单的 html 片段)
        //此处需要得到用户名是啥,从 HttpSession 中就能拿到
        //此处的 getSession 的参数必须是 false,前面在登录的过程中,已经创建过会话了,此处要直接获取到之前的会话
        HttpSession session = req.getSession(false);
        String username = (String) session.getAttribute("username");

        Integer count = (Integer) session.getAttribute("count");
        count += 1;
        session.setAttribute("count",count);

        resp.setContentType("text/html;charset=utf8");
        resp.getWriter().write("<h3>欢迎你 " + username +"这是你访问的第 " + count + "次 </h3>");
    }
}

Cookie和Session的API、登录页面

5、效果展示

Cookie和Session的API、登录页面

Cookie和Session的API、登录页面

点击页面刷新

Cookie和Session的API、登录页面

Cookie和Session的API、登录页面

第一次交互:

请求 

Cookie和Session的API、登录页面

响应

Cookie和Session的API、登录页面

第二次交互:

请求

Cookie和Session的API、登录页面

响应

Cookie和Session的API、登录页面文章来源地址https://www.toymoban.com/news/detail-435190.html

到了这里,关于Cookie和Session的API、登录页面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4.php开发-个人博客项目&登录验证&cookie&session&验证码安全

    目录 4.php开发-个人博客项目登录验证cookiesession验证码安全 知识点 本节大纲思路 ——这里以我自己的为例—— cookie验证—————— login1.php-登录后台界面 login_check.php-检查,作为包含文件 add_news.php-后台界面 php编码 如何创建 Cookie?--setcookie() 语法 实例 1 php header跳转 演示

    2024年01月23日
    浏览(47)
  • (13)session和cookie的原理分析,完成(免)登录和安全退出功能

    三种域对象 这三个域对象的大小关系: request session application, 尽量使用小的域 request 请求域(请求级别的), 对应的类名:HttpServletRequest session会话域(用户级别的), 对应的类名:HttpSession application应用域(项目级别的,所有用户共享的)对应的类名:ServletContext 三个域对象都

    2024年02月16日
    浏览(37)
  • Node.js | 详解 Cookie-Session登录验证 的工作原理

    🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 🖥️ 本系列专栏:Node.js从入门到精通 👉 你的一键三连是我更新的最大动力❤️! 📢 欢迎私信博主加入前端交流群🌹 目前绝大多数的系统都少不了 登录验证 的功能,这主要是为了保存用户的状态,以此来限制用户的各种行

    2024年01月17日
    浏览(38)
  • 从Cookie到Session: Servlet API中的会话管理详解

    首先, 在学习过 HTTP 协议的基础上, 我们需要知道 Cookie 是 HTTP 请求报头中的一个段, 本质上是浏览器在本地存储数据的一种机制, 要清楚 Cookie 是从哪里来, 要到哪里去. Cookie 是来自于服务器的, 通过响应报文中的 Set-Cookie 字段将数据返回保存在浏览器本地的; 后续当浏览

    2024年02月08日
    浏览(44)
  • 小迪安全 第15天:php开发-个人博客项目&登录验证&cookie&session&验证码安全

    1.后台验证-登录用户逻辑安全-怎么去判定用户登陆成功 2.后台验证-COOKIESESSION 3.后台验证-验证码·万能密码等 思路: 1.发送登录请求 账号 密码 2.接收账号密码 3.判断账号密码的准确性 正确 成功登陆-跳转成功页面 错误 失败登录-重新登陆 后台管理系统有多个文件页面,为了

    2024年04月15日
    浏览(75)
  • web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用

    前置学习: http springmvc 会话:用户打开浏览器,访问web服务器资源,会话建立,直到有一方断开连接会话结束,一次会话可以多次请求和连接 会话跟踪:一种维护浏览器状态的方式,服务器需要识别多次请求是否来自同一浏览器,以便同一次会话多次请求间共享数据。 cooki

    2024年02月15日
    浏览(67)
  • Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能

      前面实现了基础的跳转,那么动态交互中登录是常用功能。   本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术。        链接:https://pan.baidu.com/s/1nkmsHgr-11Khe9k6Ntyf_g?pwd=1234     Web应用程序通常处理用户输入。将开发一个登录表单,看看

    2024年02月06日
    浏览(91)
  • 精通api接口测试,接口分类,接口架构,http,webservice,dubbo接口协议,接口流程,接口工具,cookie,session,token接口鉴权原理以及实战

    接口口测试和接口自动化测试一直都是很多人混乱的概念。所以搞清楚2个的概念是很重要的一件事情。 接口:一段具备逻辑处理功能的程序代码组成的,可被其他方法、服务或应用所使用。 对于调用接口的那一方,可以把接口看做一只黑匣子,只需要负责按约定传入参数,

    2024年02月02日
    浏览(49)
  • session和cookie

    三种域对象 这三个域对象的大小关系: request session application, 尽量使用小的域 request 请求域(请求级别的), 对应的类名:HttpServletRequest session会话域(用户级别的), 对应的类名:HttpSession application应用域(项目级别的,所有用户共享的)对应的类名:ServletContext 三个域对象都

    2024年02月07日
    浏览(44)
  • 【Cookie和Session】

    🎉🎉🎉 点进来你就是我的人了 博主主页: 🙈🙈🙈 戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 🤺🤺🤺 目录 一、Cookie和Session(面试常考)  1. Cookie 2. Session  3. Cookie和Session是如何一起工作的?  4. Cookie和Session的过期校验 5. Cookie和Session的关联和区别 二、

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包