JavaScript操作cookie实现记住用户名密码功能(一)

2023-11-15

JavaScript操作cookie实现记住用户名密码功能(一)

之前说的删除cookie哪里找到解决办法了,就是直接调用setCookie(cname, cvalue, -1),传值的时候时间传入-1,就是前一天就可以了。

  • 由来简述

最近一段时间在使用springboot编写一个简单的小系统,但是写到登录注册时,突然想给登录加上一点小功能,但是写的时候有点模糊,然后向w3school求助了一下,之后自己有在那基础上有一些改动,达到了一个很好的样例,如果觉得好的给个关注,给个赞。

参考链接:https://www.w3school.com.cn/js/js_cookies.asp

主要实现了如下的一些功能:
1、页面加载完检测是否有cookie,有的话,把cookie值放入输入框中,复选框选中
2、存入cookie
3、获取cookie值
4、删除cookie,在删除cookie时调用了一个函数(我觉得这里还可以优化一下,但在下能力有限,网友大神友有好思路)
5、当复选框改变时存入cookie或是删除cookie
废话不多说,看代码:

  • 前端HTML代码
	<form>
        用户名:<input type="text" name="username" id="username"><br>
        密码<input type="text" name="password" id="password"><br>
        <input type="checkbox" name="checkbox" id="checkbox">记住我
    </form>

没了就这没简单,但实现此博客的功能足以。

  • 存入cookie的JavaScript代码
    代码的注释我的把每一个步骤写的很详细,仔细看,一定可以看得懂。
// 存入cookie
            /**
             * cname:存入的属性名称
             * cvalue:存入的值
             * exdays:过期时间
             */ 
            function setCookie(cname, cvalue, exdays){
                // 获取当前时间
                // 调用时间函数
                var date = new Date();
                // 设置过期的时间,day
                // getTime()获取的不是我们本地的,比我们晚8小时,但不影响我接下来的操作
                // (exdays*24*60*60*1000)几天时间
                date.setTime(date.getTime()+(exdays*24*60*60*1000));
                // 时间转换格式
                var expires = "expires =" + date.toGMTString();
                // 存入cookie
                document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
            }

在这里给个建议下边这个写在最前边,方便后边调用。

var check = document.getElementById("checkbox");
  • 读取cookie值
/**
             * 取出cookie中的值,根据名称
             */
            function getCookie(cname){
                // 定义一个name属于key的部分
                var name = cname + "=";
                // 把cookie中的内容根据;分割成数组
                var ca = document.cookie.split(";");
                //遍历数组
                for(var i = 0; i < ca.length; i++){
                    // 把遍历出来的内容存放入一个变量中
                    var c = ca[i];
                    // 去除收尾空格
                    while(c.charAt(0) == " "){//charAt(index),提取字符串中第几号字符
                        c = c.substring(1); //substring(start, end) 
                                           //获取这个区间的内容,只有一个表示从他之后的所有值
                    }
                    // 如果首位没有空格,就判断name字符串是否是c字符串的第一段
                    // 是的话就满足要求
                    if(c.indexOf(name) == 0){
                        return c.substring(name.length, c.length);
                    }
                }
                // 倘若cookie中没有存放有值,就返回空
            return "";
            }
  • 删除已有cookie
/**
            *   删除cookie,我通过把过期时间设置到过去的某一时刻
            * 根据名称删除, cname
            */
            function deleteCookie(cname){
                // 和设置时一样,先获取当前时间函数
                var date = new Date();
                // 把时间设置到当前时间的前一天
                date.setTime(date.getTime()-(24*60*60*1000));
                // 时间格式转换
                var expires = "expires =" + date.toGMTString();
                return document.cookie = cname + ";" + expires + ";path=/";
            }

删除cookie时我要先找到cookie的值:cname + “=” + cvalue,这一部分内容来自setCookie();在这里我把他归到一起为deleteCookie(cname);

// 获取cookie的deleteCookie()中cname
            function getCname(){
                // 把cookie中的内容根据;分割成数组
                var ca = document.cookie.split(";");
                return ca[0];
            }
  • 下边就是页面加载完就直接检测是否有cookie
    这里我又加一个建议,页面加载完执行,可以有两种方法:
    其一:我们直接使用如下:
//页面加载完执行
        window.onload = function(){
		//这里边写那些代码,但是要注意这么写,你就要调用哪个检查函数
		// 页面加载完就检测是否有cookie
            checkCookie();
            //这个马上就来
		}

其二:使用onload事件调用checkCookie();

<body onload="<body>">
	//这里是HTML代码
</body>

我的这篇是使用其一。
有了上边就可以加上下边了

// 检测是否存入了cookie
            function checkCookie(){
                // 获取cookie中的值
                var user = getCookie("username");
                var pass = getCookie("password");
                // 判断从cookie中取出的值是否有内容
                // 有,把他放入相应的输入框中显示,复选框显示勾选
                // 没有就输入
                if(user != "" && pass != ""){
                    // alert(user);
                    // 如果cookie中有值并且不为空,就直接填在输入框中,且复选框勾选
                    document.getElementById("username").value = user;
                    document.getElementById("password").value = pass;
                    check.checked = true;
                }else{ // 否则,先把复选框清空,获取输入框中的内容
                    // check.checked = false;
                    var username = document.getElementById("username").value;
                    var password = document.getElementById("password").value;
                    // 判断输入不为空存入cookie
                    if(username != "" && username != null 
                        && password != "" && password != null){
                        setCookie("username", username, 1);
                        setCookie("password", password, 1);
                    }
                }
            }
            // 页面加载完就检测是否有cookie
            checkCookie();

页面加载完首先就先执行这个。

  • 控制存入/删除cookie的操控
//复选框变动,添加cookie或者是删除cookie
            check.onchange = function(){
                // 检测并设置cookie
                if(check.checked == true){
                    checkCookie();
                }else{ // check.checked == false,取消勾选
                    // 删除cookie
                    for(var i = 0; i < 2; i++){ // 这个2是存入cookie的元素个数,
                        var get = getCname();// 手动修改,你的有几个就改为几个
                        deleteCookie(get);
                    }
                    // 删除之后把检测时放入输入框的内容去除
                    document.getElementById("username").value = "";
                    document.getElementById("password").value = "";
                }
            }

复选框选中 / 没选中的操作。
到此所有的操作就结束了。

  • 完整的代码我贴在这
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cookie 记住账号密码</title>

    <script>
        //页面加载完执行
        window.onload = function(){
            var check = document.getElementById("checkbox");

            // 存入cookie
            /**
             * cname:存入的属性名称
             * cvalue:存入的值
             * exdays:过期时间
             */ 
            function setCookie(cname, cvalue, exdays){
                // 获取当前时间
                // 调用时间函数
                var date = new Date();
                // 设置过期的时间,day
                // getTime()获取的不是我们本地的,比我们晚8小时,但不影响我接下来的操作
                // (exdays*24*60*60*1000)几天时间
                date.setTime(date.getTime()+(exdays*24*60*60*1000));
                // 时间转换格式
                var expires = "expires =" + date.toGMTString();
                // 存入cookie
                document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
            }
    
            /**
             * 取出cookie中的值,根据名称
             */
            function getCookie(cname){
                // 定义一个name属于key的部分
                var name = cname + "=";
                // 把cookie中的内容根据;分割成数组
                var ca = document.cookie.split(";");
                //遍历数组
                for(var i = 0; i < ca.length; i++){
                    // 把遍历出来的内容存放入一个变量中
                    var c = ca[i];
                    // 去除收尾空格
                    while(c.charAt(0) == " "){//charAt(index),提取字符串中第几号字符
                        c = c.substring(1); //substring(start, end) 
                                           //获取这个区间的内容,只有一个表示从他之后的所有值
                    }
                    // 如果首位没有空格,就判断name字符串是否是c字符串的第一段
                    // 是的话就满足要求
                    if(c.indexOf(name) == 0){
                        return c.substring(name.length, c.length);
                    }
                }
                // 倘若cookie中没有存放有值,就返回空
            return "";
            }

            /**
            *   删除cookie,我通过把过期时间设置到过去的某一时刻
            * 根据名称删除, cname
            */
            function deleteCookie(cname){
                // 和设置时一样,先获取当前时间函数
                var date = new Date();
                // 把时间设置到当前时间的前一天
                date.setTime(date.getTime()-(24*60*60*1000));
                // 时间格式转换
                var expires = "expires =" + date.toGMTString();
                return document.cookie = cname + ";" + expires + ";path=/";
            }

            // 获取cookie的deleteCookie()中cname
            function getCname(){
                // 把cookie中的内容根据;分割成数组
                var ca = document.cookie.split(";");
                return ca[0];
            }
            
            // 检测是否存入了cookie
            function checkCookie(){
                // 获取cookie中的值
                var user = getCookie("username");
                var pass = getCookie("password");
                // 判断从cookie中取出的值是否有内容
                // 有,把他放入相应的输入框中显示,复选框显示勾选
                // 没有就输入
                if(user != "" && pass != ""){
                    // alert(user);
                    // 如果cookie中有值并且不为空,就直接填在输入框中,且复选框勾选
                    document.getElementById("username").value = user;
                    document.getElementById("password").value = pass;
                    check.checked = true;
                }else{ // 否则,先把复选框清空,获取输入框中的内容
                    // check.checked = false;
                    var username = document.getElementById("username").value;
                    var password = document.getElementById("password").value;
                    // 判断输入不为空存入cookie
                    if(username != "" && username != null 
                        && password != "" && password != null){
                        setCookie("username", username, 1);
                        setCookie("password", password, 1);
                    }
                }
            }
            // 页面加载完就检测是否有cookie
            checkCookie();

            //复选框变动,添加cookie或者是删除cookie
            check.onchange = function(){
                // 检测并设置cookie
                if(check.checked == true){
                    checkCookie();
                }else{ // check.checked == false,取消勾选
                    // 删除cookie
                    for(var i = 0; i < 2; i++){ // 这个2是存入cookie的元素个数,
                        var get = getCname();// 手动修改,你的有几个就改为几个
                        deleteCookie(get);
                    }
                    // 删除之后把检测时放入输入框的内容去除
                    document.getElementById("username").value = "";
                    document.getElementById("password").value = "";
                }
            }
        }
    </script>

</head>
<body>
    <form>
        用户名:<input type="text" name="username" id="username"><br>
        密码<input type="text" name="password" id="password"><br>
        <input type="checkbox" name="checkbox" id="checkbox">记住我
    </form>
</body>
</html>

注意:操作cookie最好不要选用Chrome浏览器,他不支持js操作cookie
给个示例图:
赋值前:
在这里插入图片描述
赋值打勾后:
在这里插入图片描述
当把√取消,立刻又回到图1样子。
觉得不错,给个关注给个赞,让我有信心继续前进!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript操作cookie实现记住用户名密码功能(一) 的相关文章

随机推荐

  • 带icon的输入框el-input 给icon图标绑定点击事件

    element官网传送门 带icon的输入框有两种方式 选择第二种 添加点击事件
  • opengl API glCheckFramebufferStatus详解

    Name glCheckFramebufferStatus glCheckNamedFramebufferStatus check the completeness status of a framebuffer C Specificati
  • SQL解析Json字段

    MySQL支持原生JSON类型 使用JSON数据类型相较于将JSON格式的字符串存储在String型中的优势有 存储时会自动验证JSON文本 可以优化存储格式 存储在JSON型中的JSON文本会被转换成一个支持快速读取的文档元素 这样在使用
  • python基础一:计算机要点学习

    一 计算机的基本概念 1 计算机是什么 计算机是一种用于高速运算的电子机器 手机 电脑 计算器等 特点 数值计算 逻辑计算 对事物进行逻辑分析并进行判断得到的计算结果 存储记忆功能 计算机是能够按照程序运行 自动 高速处理数据的现代化电子设
  • postman几种常见的请求方式

    1 get请求直接拼URL形式 对于http接口 有get和post两种请求方式 当接口说明中未明确post中入参必须是json串时 均可用url方式请求 参数既可以写到URL中 也可写到参数列表中 都一样 请求时候都是拼URL 2 pos
  • [深入理解Android卷二 全文-第六章]深入理解ActivityManagerService

    由于 深入理解Android 卷一 和 深入理解Android卷二 不再出版 而知识的传播不应该因为纸质媒介的问题而中断 所以我将在CSDN博客中全文转发这两本书的全部内容 第6章 深入理解ActivityManagerService 本章
  • 魏副业而战:付费是最快的成长途径

    我是魏哥 与其在家躺平 不如魏副业而战 在生活中 为了提高孩子学习成绩 你会给他报辅导班 在工作中 为了提升工作效率 为了晋升 你会报课 考证书 但很少人为了自己的成长而主动付费学习 这是为什么呢 因为他没认识到付费的价值 魏哥之前也是喜欢
  • 互联网+商业模式

    大数据商业模式 10种商业模式 一 人工智能 数据 物体 智能 人工智能是数据变现的最好方式 但是目前是2B的智能买单意愿更强 GDP 20 数据是为人服务的 人接触最多的是物体 数据的智慧将延伸人的五官 拓展人的四肢 这些都依赖硬件 数据
  • 【数据结构与算法】链表OJ练习题

    作者 一只大喵咪1201 专栏 数据结构与算法 格言 你只管努力 剩下的交给时间 习题 1 移除链表元素 2 反转链表 3 链表的中间结点 4 链表中倒数第k个结点 5 合并两个有序链表 6 链表分割 7 链表的回文结构 8 相交链表 9
  • Java:求一个数组中连续子元素最大和

    public class TestArray public static int FindGreatestSumOfSubArray int array if array length 0 array null return 0 int c
  • log4j:WARN No appenders could be found for logger 解决办法

    使用log4j时不起作用 每次执行完出现以下提示 log4j WARN No appenders could be found for logger org apache ibatis logging LogFactory log4j WA
  • Linux性能分析之perf(1)基础知识总结

    Linux 09 之perf 1 基础知识总结 Author Onceday Date 2023年1月31日 漫漫长路 才刚刚开始 参考文档 Tutorial Perf Wiki kernel org linux性能分析工具专题 perf
  • FPGA-VGA协议实践

    前言 概述 VGA Video Graphics Array 视频图形阵列 是一种视频传输标准 具有分辨率高 显示速度快 颜色丰富等优点 不支持音频传输 硬件设备 FPGA开发板DE2 115 软件环境 软件环境 Quartus 一 VGA
  • one-hot Embedding 理论知识详解 + 代码实操 (为学习笔记模式,同时附完整代码)【独热向量编码】

    目 标 使用one hot Embedding 处理数据库查询语句 使其变成向量模式 以下为个人学习笔记和学习过程中用到的完整代码 环 境 腾讯云服务器 Linux系统 具体环境会在代码段前进行标注 目录 一 one hot 理论基础 二
  • pytest-mock的使用

    mock介绍 当一个功能依赖另一个功能时 而这个功能还没有完善 需要使用mock来模拟依赖的返回 mock主要有以下几个库 unittest mock python内置的用于mock的库 有Mock MagicMock path等类可以使用
  • python热更新_reload 实现热更新

    什么是 reload 当我们在 python 的交互模式下测试某个类的时候 发现这个类的某个方法有错误进行了修改 而这个方法的输入又依赖于之前在交互模式下的好几个操作 这时要怎么办呢 如果重启交互模式 那么该方法依赖的操作就得重新再来一次
  • IIS搭建本地电脑服务器:通过内网穿透技术实现公网访问的步骤指南

    1 前言 在网上各种教程和介绍中 搭建网页都会借助各种软件的帮助 比如网页运行的Apache和Nginx 数据库软件MySQL和MSSQL之类 为方便用户使用 还出现了XAMPP PHPStudy 宝塔面板等等一系列集成服务 都是为了方便我
  • 接口测试常用工具(转)

    原文地址 https my oschina net hellotest blog 662347 Poster 这是火狐浏览器的一个插件 如果你想调试服务器 发出HTTP请求 Poster操作简单 你先设定一个内容类型 数分钟内 你将拥有需要
  • 如果后端API一次返回10万条数据,前端应该如何处理?

    英文 https medium com frontend canteen if the backend api returns 100 000 records at one time how should we handle it in t
  • JavaScript操作cookie实现记住用户名密码功能(一)

    JavaScript操作cookie实现记住用户名密码功能 一 之前说的删除cookie哪里找到解决办法了 就是直接调用setCookie cname cvalue 1 传值的时候时间传入 1 就是前一天就可以了 由来简述 最近一段时间在使