文档章节

nodejs中cookie、session的使用

c
 caiyezi
发布于 2016/11/08 20:24
字数 690
阅读 14
收藏 0
点赞 0
评论 0

因为http会话的无状态性,为了标记用户的登录状态,便出现了cookie。cookie分为很多种,有普通cookie、签名cookie、json cookie等,这里主要记录下在express应用中如何配置使用cookie及session。

cookie、session的区别:

  • cookie数据存放在客户的浏览器上,session数据放在服务器上。
  • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用session。
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用COOKIE。
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
  • 所以建议:将登陆信息等重要信息存放为session、其他信息如果需要保留,可以放在cookie中

cookie

首先是app.js中的配置:

...
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
...
app.use(cookieParser('this is the secret key for singed cookie'));
...

js路由中使用比较简单:

router.post("/setCookie",function(req,res, next){
    var addr = req.body.a;
    //设置cookie,配置signed: true的话可以配置签名cookie
  res.cookie(
"addr", addr, {maxAge: 1000*60*60*24*30,httpOnly: true}); //, signed: true next(); });
//获取cookie
var
a = req.cookies.addr;
//var a = req.signedCookies['addr']; 获取签名cookie console.log(a);
直接在html页面中通过js获取cookie
function getCookie(objName){//获取指定名称的cookie的值
      var arrStr = document.cookie.split("; ");
      for(var i = 0;i < arrStr.length;i ++){
           var temp = arrStr[i].split("=");
           if(temp[0] == objName){
               jQuery("#isLogin").replaceWith("欢迎您&nbsp;<a href='/user/list/true/1' class='t-reg mrgL10' id='isLogin'>"+decodeURIComponent(temp[1])+"</a>");
               jQuery("#isLogout").replaceWith("<a href='/reguser/logout' class='t-reg mrgL10 ' id='isLogout'>退出</a>&nbsp;&nbsp;|&nbsp;&nbsp;");
           }
      }
}

 

session

app.js配置:

...
var session = require("express-session");
var cookieParser = require('cookie-parser');
...
app.use(session({
    secret: 'this is the secret for cookie',
    resave: false,
    saveUninitialized: true
}));

app.use(function (req, res, next) {
    var url = req.originalUrl;
    if (url != "/" && undefined == req.session.user) {
          res.send('<script>top.location.href="/";</script>');      //解决内嵌iframe时session拦截问题
          return;
      }
    }
    next();
});

在路由中直接通过如下设置或者获取session数据:

var user = req.session.user;
console.dir(user);

session的清除:

req.session.destroy(function(err) {
    res.redirect('/');
})

 

将session存储到mongodb数据库当中:

var session = require('express-session');
    var MongoStore = require('connect-mongo')(session); mongoose.connect('mongodb://127.0.0.1:27017/hubwiz'); //连接数据库 mongoose.connection.on('open', function () { console.log('-----------数据库连接成功!------------'); }); app.use(session({ secret: config.cookieSecret, //secret的值建议使用128个随机字符串 cookie: {maxAge: 60 * 1000 * 60 * 24 * 14}, //过期时间 resave: true, // 即使 session 没有被修改,也保存 session 值,默认为 true saveUninitialized: true, store: new mongoStore({ mongooseConnection: mongoose.connection //使用已有的数据库连接  }) })); app.listen(80);

将session数据同步到redis中:

var express = require('express');
    var session = require('express-session'); var RedisStore = require('connect-redis')(session); var app = express(); var options = { "host": "127.0.0.1", "port": "6379", "ttl": 60 * 60 * 24 * 30, //session的有效期为30天(秒)  }; // 此时req对象还没有session这个属性  app.use(session({ store: new RedisStore(options), secret: 'express is powerful' })); app.listen(80);

 

本文转载自:http://www.cnblogs.com/vipzhou/p/4949120.html

共有 人打赏支持
c
粉丝 1
博文 108
码字总数 0
作品 0
西安
程序员
【深入浅出Node.js系列十一】Node.js开发框架Express4.x

深入浅出Node.js系列 【深入浅出Node.js系列一】什么是Node.js 【深入浅出Node.js系列二】Node.js&NPM的安装与配置 【深入浅出Node.js系列三】深入Node.js的模块机制 【深入浅出Node.js系列四...

陶邦仁
2016/01/19
282
0
使用express框架时,用MongoDB存放session时,出现错误,解决方法

使用express框架时,用MongoDB存放session时,出现错误如下: D:WorkSpacenodejsusernodemodulesconnect-mongolibconnect-mongo.js:153 throw new Error('Error connecting to database'); ......

maweitao
2014/04/11
0
0
OAuth 及 移动端鉴权调研

OAuth OAuth是一个解决用户无需向第三方应用提供用户名密码,让第三方应用访问用户私密资源的授权方案。 举例: 用户a,在网站B存有私密信息(年龄、邮箱、头像),而a在访问第三方网站C时,为...

马肱
05/15
0
0
Express.js实现CSRF防护

不赘述什么是csrf了,关于怎么方式csrf伪造,网上有很多资料可以查,比如http://www.ibm.com/developerworks/cn/web/1102niugangcsrf/ 。我这里直说怎么在express.js里实现方式防护csrf的。 ...

Riemann_G
2014/01/22
0
1
关于《Node.js 包教不包会》中cookie 与 session的补充

刚开始学node,在看到Lesson 16: 《cookie 与 session》中关于在 redis 中存储 session中,直接按照博主的代码是不能运行的,当时很苦恼,挺郁闷的,直接copy都运行不了.... 经过一顿搜索以后...

康州牧码人
2015/08/27
0
0
Node.js Express 从入门到菜鸟(二)——Cookie+Session+三层搭建

上一篇中,咱们说到使用Node.js express搭建简单的网站(“不就是Hello World!么”,只要你够蛋疼,返回整个html文件的字符串,什么网站你也能做),以及ejs模板的使用。 这一篇本来是想直接...

braveqin
2014/03/15
0
0
JS服务端系列-nodejs+express+ejs+mongodb的数据显示

1.我们下载好mongodb数据库,这个程序我放在nodejs的目录下了, 我的nodejs是安装在d: nodejs目录下,看图可以看到我的存放位置,这个随便放置 2.打开cmd窗口,转到mongodb的bin目录下, 执行...

透笔度
2015/08/05
0
0
【深入浅出Node.js系列七】Connect模块解析

深入浅出Node.js系列 【深入浅出Node.js系列一】什么是Node.js 【深入浅出Node.js系列二】Node.js&NPM的安装与配置 【深入浅出Node.js系列三】深入Node.js的模块机制 【深入浅出Node.js系列四...

陶邦仁
2016/01/11
224
0
使用 AngularJS & NodeJS 实现基于 token 的认证应用

传统的认证系统 在开始说基于 token 的认证系统之前,我们先看一下传统的认证系统。 用户在登录域输入 用户名 和 密码 ,然后点击 登录 ; 请求发送之后,通过在后端查询数据库验证用户的合法...

大糊涂
2015/06/22
0
1
WEB前端学习面试问题:同学,你对cookie了解多少啊?

Web前端开发工程师是一个很新的职业,是从事Web前端开发工作的工程师。主要进行网站开发,优化,完善的工作。网页制作是Web 1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行...

web前端小辰
05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决dokuwiki创建中文词条文件乱码问题

若直接创建中文词条,打开本地文件夹\dokuwiki\data\pages你会发现,中文字段显示的是URL乱码,需要改一下utf8格式,方法如下:(linux系统亲测有效) 打开 .dokuwiki\conf\local.php 添加一行...

Rhymo-Wu
1分钟前
0
0
设置圆角长条progressbar背景色

1、首先在Drawable下面新建一个xml文件,将这段代码复制进去 <?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-......

王先森oO
1分钟前
0
0
Java语言学习(九):异常处理

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。常见的三种异常类型有: 检查性异常,如打开一个不存在的文件 运行时异常,如数组越界 错误,如栈溢出 ...

海岸线的曙光
4分钟前
0
0
深入分析golang多值返回以及闭包的实现

一、前言 golang有很多新颖的特性,不知道大家的使用的时候,有没想过,这些特性是如何实现的?当然你可能会说,不了解这些特性好像也不影响自己使用golang,你说的也有道理,但是,多了解底...

万建宁
5分钟前
0
0
img与background-image之间的区别

1.img <img src="图片来源" alt="图片无法显示时显示图片说明性文字" style="设置样式属性" /> img标签虽然不是块状元素,但是可以设置宽高,占位, img设置width后height会自适应匹配,如果...

爱喝水的小熊
7分钟前
0
0
Swift - 添加提示音

func createSound() { //建立的SystemSoundID对象 var soundID:SystemSoundID = 123 //获取声音地址 let path = Bundle.main.path(forResource: "3quan......

west_zll
9分钟前
0
0
为图片写水印的时候中文乱码

缘由:源代码在本地win7 操作系统添加水印正常,但在linux 7.4 上 添加水印乱码(空心方格) 问题的本质是在linux 操作系统中没有对Font 类支持的字体,才会出现乱码 问题截图: 1.系统linux...

qimh
9分钟前
0
0
微信小游戏子域和主域

1、主域只能够设置自身的敏感属性值 2、子域只能够读取自身、朋友、群友的敏感属性值

微信小程序-暗潮
9分钟前
0
0
Django时区详解

引言 相信使用Django的各位开发者在存储时间的时候经常会遇到这样子的错误: RuntimeWarning: DateTimeField received a naive datetime while time zone support is active. 这个错误到底...

bobway
15分钟前
0
0
改造工程步骤

背景: 对于存在有问题的项目(包括 代码不规范 数据库表命名不规范 )需要改造 步骤: 1 新建工程 : 将需要改造的项目拷贝一份 修改项目名称 2 将相应的表结构拷贝到新的数据库中 修改不直...

猿神出窍
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部