因为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中的配置:

  1. ...
  2. var cookieParser = require('cookie-parser');
  3. var bodyParser = require('body-parser');
  4. ...
  5. app.use(cookieParser('this is the secret key for singed cookie'));
  6. ...

js路由中使用比较简单:

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

session

app.js配置:

  1. ...
  2. var session = require("express-session");
  3. var cookieParser = require('cookie-parser');
  4. ...
  5. app.use(session({
  6. secret: 'this is the secret for cookie',
  7. resave: false,
  8. saveUninitialized: true
  9. }));
  10.  
  11. app.use(function (req, res, next) {
  12. var url = req.originalUrl;
  13. if (url != "/" && undefined == req.session.user) {
  14. res.send('<script>top.location.href="/";</script>');      //解决内嵌iframe时session拦截问题
  15. return;
  16. }
  17. }
  18. next();
  19. });

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

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

session的清除:

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

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

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

将session数据同步到redis中:

  1. var express = require('express');
  2. var session = require('express-session');
  3. var RedisStore = require('connect-redis')(session);
  4.  
  5. var app = express();
  6. var options = {
  7. "host": "127.0.0.1",
  8. "port": "6379",
  9. "ttl": 60 * 60 * 24 * 30, //session的有效期为30天(秒)
  10. };
  11.  
  12. // 此时req对象还没有session这个属性
  13. app.use(session({
  14. store: new RedisStore(options),
  15. secret: 'express is powerful'
  16. }));
  17.  
  18. app.listen(80);

nodejs中cookie、session的使用的更多相关文章

  1. flask中cookie,session的存储,调用,删除 方法(代码demo)

    # -*- encoding: utf-8 -*- # cookie,session的存储,调用,删除 from flask import Flask,make_response,request,se ...

  2. Django中cookie&session的实现

    1.什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie是key-value结构,类似于一个python中的字典.随着服 ...

  3. Nodejs之使用session

    nodejs中使用session的说明. session介绍 为什么使用session: session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登陆信息保存. 当客户访问其他界面时,可 ...

  4. nodeJS之Cookie和Session(一)

    nodeJS之Cookie和Session(一) 一:Cookie   HTTP是一个无状态协议,客户端每次发出请求时候,下一次请求得不到上一次请求的数据,那么如何将上一次请求和下一次请求的数据关联起 ...

  5. Http中Cookie和Session介绍

    先介绍下B/S系统的工作的完整过程.首先客户端的浏览器发出请求,服务端的webserver接受到请求后,调用相关请求的页面进行处理,处理完后将结果发送给客户端的浏览器进行显示.只能是浏览器向webse ...

  6. 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法

    单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...

  7. Java中的会话Cookie&&Session

    会话技术 会话: 一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求之间共享数据 方式: 客户端会话技术:coo ...

  8. {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

    Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...

  9. python三大框架之一flask中cookie和session的相关操作

    状态保持 Cookie cookie 是指某些网站为了 辨别  用户身份,进行会话跟踪而储存在用户本地的数据(通常会经过加密),复数形式是 coolies. cookie是由服务器端生成,发送给客户端 ...

随机推荐

  1. 非固定参数:*args和 **kwargs

    先看一个固定参数栗子: def func1(x, args): print(x, args) func1(1,22) ====================1 22 ================ ...

  2. 波利亚(Polya)罐子模型

    (波利亚(Polya)罐子模型)罐中有a个白球,b个黑球,每次从罐中随机抽取一球,观察其颜色后,连同附加的c个同色球   (波利亚(Polya)罐子模型)罐中有a个白球,b个黑球,每次从罐中随机抽取一 ...

  3. 6.iptables常用规则

    开启ip段192.168.1.0/24端的80口 开启ip段211.123.16.123/24端ip段的80口 # iptables -I INPUT -p tcp --dport 80 -j DRO ...

  4. 实现反转的方法(reverse)

    1.最简单的方法: public static String reverse1(String str) { return new StringBuffer(str).reverse().toStrin ...

  5. [转]Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

    原文地址: http://outofmemory.cn/c/java-outOfMemoryError java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生 ...

  6. javascript canvas画订单

    前段时间看了某个平台的后台,发现订单显示使用的canvas进行绘画(插件echarts),直观,明了的表达出了订单的走势如下 所以自己心痒痒的,就自己模仿了一个-->贴上代码 <style ...

  7. flask.abort

    abort(status) status:标注状态码,和异常 抛出异常后会终止当前函数 使用errorhandler装饰器捕获abort异常 @app.errorhandler(500) def in ...

  8. 01. css sprite是什么,有什么优缺点?

    1.css sprite是什么,有什么优缺点? 通常被意译为“CSS图像拼合”或“CSS贴图定位” 1)CSS Sprites的优点 利用CSS Sprites能很好地减少网页的http请求,从而大大 ...

  9. [CoffeeScript]在WebStorm里运行CoffeeScript

    CoffeeScript 是一门编译到 JavaScript 的小巧语言. 在 Java 般笨拙的外表下, JavaScript 其实有着一颗华丽的心脏. CoffeeScript 尝试用简洁的方式展 ...

  10. Comparable比较器和Comparator比较器

    1.Comparable比较器 在Arrays类中存在sort()排序方法,此方法可以直接对对象数组进行排序. public static void sort(Object[] a 根据元素的自然顺序 ...