cookie是由服务器发送给客户端(浏览器)的小量信息。

我们知道,平时上网时都是使用无状态的HTTP协议传输出数据,这意味着客户端与服务端在数据传送完成后就会中断连接。这时我们就需要一个一直保持会话连接的机制。在session出现前,cookie就完全充当了这种角色。也就是,cookie的小量信息能帮助我们跟踪会话。一般该信息记录用户身份。

当然cookie也常记录跟踪购物车的商品信息(如数量)、记录用户访问次数等。

cookie-parser 的作用就是设置,获取和删除 cookie。

var express = require('express');

//引入cookie-parser模块
var cookieParser = require("cookie-parser");

//创建express实例
var app = express();

 // 设定监听端口
app.set('port', process.env.PORT || 3000);

//创建cookie实例
app.use(cookieParser());

app.use("/login", function(req,res){
    //获取cookie
    console.log(req.cookies);

    //设置cookie,关闭签名
    res.cookie("user", {username: req.body.username}, {maxAge: 600000 , httpOnly: true, 'signed': false});
});

//监听3000端口
var server = app.listen(app.get('port'),function(){
    console.log("创建成功!")
});   

引入

var cookieParser = require('cookie-parser');    #引入模块
app.use(cookieParser());        #挂载中间件,可以理解为实例化

这两行代码默认在app.js中写好了,表示现在可以直接使用 cookie 了。

创建cookie

res.cookie(name, value [, options]);

name 是 cookie 名,value 是 cookie 值,可以是 json 对象或字符串。options 是选项,常用选项有:

{
    'maxAge': 90000,    # 有效时长,即90000毫秒后过期,String
    'signed': false     # 默认为false,表示是否签名,Boolean
}

创建 cookie 会在 http 响应头中添加Set-Cookie,从而在浏览器中设置 cookie

获取cookie

var cookies = req.cookies      # 获取cookie集合
var value = req.cookies.key    # 获取名称为key的cookie的值

删除cookie

res.clearCookie(name [, options])

name 是 cookie 名,options 与创建 cookie 时所传一致 

签名

上面所写 cookie 的各种操作,都是没有经过签名的。签名可以提高安全性。下面是使用签名生成 cookie 的方法,大同小异,修改上文即可:

修改实例配置:

app.use(cookieParser('ruidoc')); # 需要传一个自定义字符串作为secret

修改创建cookie配置

# 创建cookie的options中,必填 signed: true
res.cookie(name, value, {
    'signed': true
});

修改获取cookie方式:

var cookies = req.signedCookies      # 获取cookie集合
var value = req.signedCookies.key    # 获取名称为key的cookie的值

使用cookie记住密码

方案1:

直接把用户名与密码都保持到Cookie中,下次访问时检查Cookie中的用户名与密码,与数据库比较。这是一种比较危险的选择,一般不把密码等重要信息保存到Cookie中。

方案2:

把密码加密后保存到Cookie中,下次访问时解密并与数据库比较。这种方案略微安全一些。如果不希望保存密码,还可以把登录的时间戳保存到Cookie与数据库中,到时只验证用户名与登录时间戳就可以了。

方案3:

实现方式是把账号按照一定的规则(密钥)加密后,连同账号一块保存到Cookie中。下次访问时只需要判断账号的加密规则是否相同即可。

node会话管理——cookie-parser的更多相关文章

  1. 会话管理---Cookie与Session

    会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 保存会话数据的两种技术:Cookie,Session Cookie是客户端技术, ...

  2. Java中的会话管理——HttpServlet,Cookies,URL Rewriting(译)

    参考谷歌翻译,关键字直接使用英文,原文地址:http://www.journaldev.com/1907/java-session-management-servlet-httpsession-url ...

  3. Java 中的会话管理—— HttpServlet,Cookies,URL Rewriting(转)

    索引 1.什么是 Session? 2.Java 中的会话管理—— Cookie 3.Java Servlet 中的 Session —— HttpSession 理解 JSESSIONID Cook ...

  4. java的会话管理:Cookie和Session

    java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...

  5. PHP会话管理:cookie和session

    PHP会话管理1.cookie数据存储在浏览器端方便与JavaScript交换数据方便获取用户信息风险-浏览器可能会禁用cookie替代方案-URL参数 2.session数据存储在服务器高效.安全. ...

  6. WEB程序会话管理--HttpSession和Cookie

    WEB应用的会话管理的原理: 由于WEB应用的请求和响应是基于HTTP的,而HTTP由属于无状态的通信协议,只能记录本次请求的信息,因此服务器不会记住这一次的请求和下一次请求的关系.所以会话管理的原理 ...

  7. 会话管理(Cookie/Session技术)

    什么是会话:用户打开浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称为一个会话: 会话过程需要解决的问题:每个用户在使用浏览器与服务器进行会话的过程中,都可能会产生一些 ...

  8. 基于hi-nginx的web开发(python篇)——cookie和会话管理

    hi-nginx通过redis管理会话. 要开启管理,需要做三件事. 第一件开启userid: userid on; userid_name SESSIONID; userid_domain loca ...

  9. 使用Cookie进行会话管理

    javaweb学习总结(十一)——使用Cookie进行会话管理 一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. ...

随机推荐

  1. 移动端页面怎么适配ios页面

    1.viewport 简单粗暴的方式:<meta name="viewport" content="width=320,maximum-scale=1.3,user ...

  2. innerText、innerHTML

    innerTest修改的是标签的文本内容,如果修改的字符串具有标签的格式,不会把标签展示到页面中 innerHtml打印标签中所有子标签 以字符串的形式,如果修改的字符串有标签的格式,则直接展示到页面 ...

  3. P2252 取石子游戏 威佐夫博弈

    $ \color{#0066ff}{ 题目描述 }$ 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆 ...

  4. php 写入csv时 双引号,逗号及特殊字符

    1.双引号 <?php function new_csv($string) { $filename = date('Ymd').'.csv'; //设置文件名 header("Cont ...

  5. JSONP原理及简单实现 可做简单插件使用

    JSONP实现跨域通信的解决方案. 在jquery中,我们可以通过$.ajax的dataType设置为jsonp来调用jsonp,但是jsonp和ajax的实现原理一个关系都木有.jsonp主要是通过 ...

  6. html的第一个程序

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. java的长字符串转化为短字符串

    public class CustomEncrypt{ public static void main( String[] args ) { /* * c#给的正确测试用例: id=>mid * ...

  8. 隐藏入口文件的apache配置

    AllowOverride None->AllowOverride All #LoadModule rewrite_module modules/mod_rewrite.so->LoadM ...

  9. MariaDB 密码,新用户添加

    修改root密码1.以root身份在终端登陆(必须)2.输入 mysqladmin -u root -p password ex后面的 ex 是要设置的密码3.回车后出现 Enter password ...

  10. 宽度优先搜索(BFS)— 20180909 - 20180917

    BFS几类题: 1.图的遍历:a.层级遍历 b.由点及面 c.拓扑排序 2.简单图最短路径: 简单图:1.无向图 2.边权重一致 图的时间复杂度: N个点,M条边,M最大是N^2,时间复杂度O(N+M ...