沃梦达 / IT编程 / 前端开发 / 正文

静态页面利用JS读取cookies记住用户信息

在使用JavaScript读取cookie之前,我们需要先了解什么是cookie。Cookie是指客户端保存在浏览器中的一小段文本数据,由Web服务器生成并存储在用户计算机上,当下次用户访问相同的站点时,服务器可读取此cookie的值,来判断用户是否合法,以及是否登

  1. 静态页面读取cookie的基本原理

在使用JavaScript读取cookie之前,我们需要先了解什么是cookie。Cookie是指客户端保存在浏览器中的一小段文本数据,由Web服务器生成并存储在用户计算机上,当下次用户访问相同的站点时,服务器可读取此cookie的值,来判断用户是否合法,以及是否登录过等。

读取cookie需要使用JavaScript中的document.cookie属性。该属性可以返回当前网页保存的所有cookie,以字符串的形式表示。cookie通常是由名称、值、过期时间、路径和域等多个字段构成的。为了方便读取cookie,我们可以自定义一个函数来实现字符串转换为json格式的cookie,以便更方便的进行读取:

function cookieToJSON () {
    var cookies = document.cookie.split(';');
    var cookieJSON = {};
    for (var i = 0; i < cookies.length; i++) {
        var parts = cookies[i].split('=');
        cookieJSON[parts.shift().trim()] = decodeURI(parts.join('='));
    }
    return cookieJSON;
}

上述代码中,document.cookie.split(";")会把所有的分号拆开,在经过循环遍历后将一个个的cookie用等号分成数组,根据数组索引的位置,将去掉首位空格的name作为cookie的键,将值解码为字符串后作为cookie的值,最后组装成一个json格式返回。

  1. 利用JS读取cookie并记住用户信息的示例

(1)用户登录页面

在用户登录页面,通常需要用户输入用户名和密码,然后将这些信息提交到后台进行验证,验证通过后再存储用户信息。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>登录页面</title>
    </head>
    <body>
        <form>
            <label for="username">用户名:</label>
            <input type="text" id="username">
            <br>
            <label for="password">密码:</label>
            <input type="password" id="password">
            <br>
            <button type="button" onclick="login()">登录</button>
        </form>
        <script>
            function login() {
                // 根据用户输入的用户名和密码进行验证,如验证通过则存储cookie
                var username = document.getElementById("username").value;
                var password = document.getElementById("password").value;
                if (username === 'admin' && password === '123456') {
                    var user = {
                        username: username,
                        timestamp: new Date().getTime() // 记录当前时间戳,用于判断是否过期
                    };
                    document.cookie = "user=" + encodeURIComponent(JSON.stringify(user)) // 存储cookie
                    alert('登录成功');
                    window.location.href = 'index.html'; // 跳转到主页
                } else {
                    alert('用户名或密码错误');
                }
            }
        </script>
    </body>
</html>

上述代码中,用户输入用户名和密码后,点击登录按钮时,调用login函数进行验证。如果验证通过,则生成一个名为user的cookie,并将用户信息存储为json格式。然后通过window.location.href将页面跳转到主页index.html。

(2)首页读取cookie并显示用户信息

在首页中,我们可以通过JS读取cookie,判断用户是否已经登录,并将用户信息显示出来。如果用户已经登录,则可以直接显示用户信息,否则显示登录按钮,引导用户进行登录。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>首页</title>
    </head>
    <body>
        <div id="user-info"></div>
        <div id="login-btn"></div>
        <script>
            // 读取cookie并显示用户信息
            var cookieJSON = cookieToJSON();
            if (cookieJSON.user) {
                var user = JSON.parse(cookieJSON.user);
                if (new Date().getTime() - user.timestamp > 3600 * 1000) { // 判断登录是否过期
                    document.cookie = "user=;expires=Thu, 01 Jan 1970 00:00:01 GMT"; // 登录已过期,清除cookie
                } else {
                    var loginStr = user.username + ',欢迎回来!';
                    document.getElementById('user-info').innerHTML = loginStr;
                    document.getElementById('login-btn').innerHTML = '<button onclick="logout()">退出登录</button>';
                }
            } else {
                document.getElementById('login-btn').innerHTML = '<button onclick="window.location.href=\'login.html\'">登录</button>';
            }

            // 退出登录
            function logout() {
                document.cookie = "user=;expires=Thu,01 Jan 1970 00:00:01 GMT"; // 清除cookie
                alert('退出登录成功');
                window.location.reload(); // 刷新页面
            }
        </script>
    </body>
</html>

上述代码中,通过调用cookieToJSON函数读取当前网站的cookie,并判断是否存在名为user的cookie。如果存在,则表示用户已经登录,将用户名和欢迎语显示出来,并显示退出登录按钮;如果不存在,则显示登录按钮,引导用户进行登录。当用户点击退出登录按钮时,调用logout函数,将已登录的cookie清除,并刷新页面即可。

值得注意的是,在存储cookie时,我们没有将过期时间设为10年或更长的时间,而是只设置到了1个小时,因为长时间的cookie不仅存在安全隐患,而且可能会影响用户的体验。当然,这个时间可以根据实际情况进行修改。

本文标题为:静态页面利用JS读取cookies记住用户信息