Cookies, Session Storage, Local Storage

Cookies, Session Storage, Local Storage 三者间区别

 

Cookies

Session Storage

Local Storage

存储数据量

4kb10mb5mb

浏览器

HTML4/HTML5

HTML5

HTML5

来源

任何窗口(同源)

任何窗口(同源)

同一个窗口

期限

自定义

永久

当窗口关闭

存储位置

浏览器和服务器

浏览器

浏览器

和HTTP请求一块发送?

 

 

 

 

 

 

 

 

注意: 

cookie 随 HTTP 请求一块发送, localStorage 是本地存储, sessionStorage 是会话存储

localStorage 是同步的,阻塞应用程序

 

以下是Cookies, Session Storage, Local Storage 的小例子

1. Cookies 用法

node.js 服务端代码:

var express = require("express");
var bodyParser = require('body-parser')
var cookieParser = require('cookie-parser');
var app = express();
app.engine('html', require('express-art-template'))

app.use(cookieParser())

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.get('/cookie', function (request, response) {
    response.render('cookie.html')
})

app.post('/CookiesTest', function (request, response) {
    if (!request.headers.cookie) {
        response.cookie("username", request.body.username, { maxAge: 60000, httpOnly: true });
        response.cookie("password", request.body.password, { maxAge: 60000, httpOnly: true });
        return response.end("CookiesTest")
    }
    var Cookies = {}
    request.headers.cookie.split(';').forEach(function (Cookie) {
        var parts = Cookie.split('=');
        Cookies[parts[0].trim()] = (parts[1] || '').trim()
    })
    if (request.body.username == Cookies['username']) {
        if (request.body.password == Cookies['password'])
            response.end(Cookies['username'] + ",欢迎再次登录")
    } else {
        //maxAge为有效时长,单位为毫秒
        response.cookie("username", request.body.username, { maxAge: 60000, httpOnly: true });
        response.cookie("password", request.body.password, { maxAge: 60000, httpOnly: true });
        response.end("CookiesTest")
    }
})

app.listen(3000, function () {
    console.log('app is running at port 3000')
})

浏览器代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<script>
    //浏览器端添加Cookie
    function setCookie(key, value, expiretime){//expiretime 为天数或秒
        var expiredate = new Date();
        // expiredate.setDate(expiredate.getDate()+expiretime);
        expiredate.setTime(expiredate.getTime()+expiretime*1000);
        //escape()函数,可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
        //unescape()函数,可对通过escape()编码的字符串进行解码。
        document.cookie = key+"="+escape(value)+((expiredate==null)?"":";expires="+expiredate.toGMTString())
    }
    function CookiesTest() {
        var username = document.getElementById("username").value;
        var password = document.getElementById("password").value;
        if(username ==""|| password == ""){
            return document.getElementById("result").innerText = "用户名或密码不能为空";
        }
        var xhr;
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
            xhr = new XMLHttpRequest();
        }
        else {// code for IE6, IE5
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                if(xhr.responseText==="CookiesTest"){
                    document.getElementById("result").innerHTML = "首次登录成功!!";
                    //setCookie("username",username,60);//过期时间为一分钟
                    //setCookie("password",password,60);
                }else{
                    document.getElementById("result").innerHTML = xhr.responseText;
                    //setCookie("username",username,60);//过期时间为一分钟
                    //setCookie("password",password,60);
                }
            }
        }
        xhr.open("post", "/CookiesTest", true);    
        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xhr.send("username="+username+"&password="+password);//send方法用来发送请求
    }

</script>

<body>
    用户名:<input id="username" type="text"/><br>
    密码:<input id="password" type="password"/><br>
    <input type="button" value="登录" onclick="CookiesTest()"/><br>
    提示:<span id="result">未登录!!</span>
</body>

</html>

2. Session Storage 用法

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <span id="result"></span>
</body>
<script>
    // 检测浏览器支持
    if (typeof (Storage) !== "undefined") {//window.sessionStorage
        // 存保存数据
        window.sessionStorage.setItem("key", "value");
        // 读取数据
        document.getElementById("result").innerHTML = sessionStorage.getItem("key");
        // 删除指定键的数据
        // sessionStorage.removeItem("key");
        // 删除所有数据:
        // sessionStorage.clear();
    } else {
        document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Storage...";
    }
</script>

</html>

3. Local Storage 用法

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title></title>
</head>

<body>
    <span id="result"></span>
</body>
<script>
    // 检测浏览器支持
    if (typeof (Storage) !== "undefined") {//window.localStorage
        // 存保存数据
        window.localStorage.setItem("key", "value");
        // 读取数据
        document.getElementById("result").innerHTML = localStorage.getItem("key");
        // 删除指定键的数据
        // localStorage.removeItem("key");
        // 删除所有数据:
        // localStorage.clear();
    } else {
        document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Storage...";
    }
</script>

</html>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值