Tag: 会话

为什么在会话结束之后,MongoStore的MongoStore会不走呢?

即使 app.use(express.session({ secret: conf.secret, maxAge : new Date(Date.now() + 360000), expires: new Date(Date.now() + 360000),//I've tried both separately store : new MongoStore(conf.db), })); 在mongodb会议永远留下(据我testing) 即使在会话结束之后,会话存储在MongoDB中应该保持在那里吗? 因为即使maxAge或会话声明过期,在MongoDB中,所有的会话都是这样的: { "_id" : "FU8k3kEzquG/hoSD308H5XHa", "session" : "{\"cookie \":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true, \"path\":\"/\"}}" } 另外,在我的大部分_id中都有一些非数字/字母的字符,比如/,+等。他们应该是这样吗? 每当我重新打开浏览器时,都会创build一个新的会话,但是旧的会话仍然在MongoDB中。 我只是想知道这是否有解决办法,或者这是故意的。 谢谢,布兰登

connect.session的秘密和connect.cookieParser的区别?

我想使用连接模块connect.session和connect.cookieParser在我的Express应用程序中使用安全的cookie。 根据文档,都接受一个secret参数。 该密钥用于防止用户篡改cookie。 我应该将相同的密钥设置到两个模块还是两个不同的模块? 或者我应该只通过一个关键到其中之一?

为什么socket.io使用不同的path创build第二个“sid”cookie?

我正在拉起一个项目,我发誓这不是一个问题以前,但显然不是现在 – 我可能做一些愚蠢的事情。 我看到express&socket.io创build了两个不同的“sid”cookie,一个是“/”path,另一个是“/socket.io”path。 我期望的行为是分享我的快递应用程序和套接字之间相同的cookie /会话。 “/”的“sid”cookie: “/ socket.io”的“sid”cookie: 我正在通过以下方式设置快递: var config = require('config'); var express = require('express'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var sessionStore = require('./session-store'); var sessionConfig = { store : sessionStore, secret : config.server.sessionSecret, key : config.server.sessionKey, saveUninitialized : true, resave : true, cookie : { secure: config.server.useHTTPS } […]

如何在多个服务器中检索NodeJS中的SessionID?

我是NodeJS的新手。 我正在开发一个REST API并使用快速会话来处理会话。 所以,要获得我正在使用的会话ID var sessionID = req.sessionID 此会话ID是从服务器端生成的。 所以,当我扩展到两个或更多的服务器,这是一个问题。 例如,如果一台服务器closures并且请求被redirect到另一台服务器(假设我有一个负载平衡器),则会生成一个新的会话ID。 那么,有没有办法从客户端检索会话ID?

使用memcached来存储会话数据,是否安全?

我应该开发网站来完成一些有关自动完成的书籍的数据。 每个页面都有1500个左右的ajax请求到服务器! 所以我决定用Yii框架来做主要的部分,而不是使用ajax,而是使用NodeJS的Socket.IO来获得更快的响应。 现在的问题是两种编程语言之间的同步会话数据。 使用memcached来存储它安全吗? 我的意思是将SESSIONID保存为memcached中的键名,并使用JSON作为值。 所以我可以通过PHP和NodeJS来访问它。 安全吗?

检查redis是否正在运行 – >节点js

我只是想知道,在我的NodeJS过程的开始,如果Redis是否启动(所以用户会话将被存储与否)。 这是我目前所拥有的: var session = require('express-session'); var RedisStore = require('connect-redis')(session); var redis = require("redis"); var client = redis.createClient(global.redis.host, global.redis.port); // Check if redis is running var redisIsReady = false; client.on('error', function(err) { redisIsReady = false; console.log('redis is not running'); console.log(err); }); client.on('ready', function() { redisIsReady = true; console.log('redis is running'); }); // Here I use […]

如何正确使用Passport.js?

我在用 : Node.js的 Express 4.0 Passport.js Google OAuth 2进行身份validation 对于每个用户,我存储在一个MySQL数据库(我没有关于这项技术的select)从他的谷歌个人资料(电子邮件等),访问和刷新令牌的一些信息,以及用户提供的额外信息他注册在我的应用程序。 我已经看到passport.js的不同用途,特别是关于如何将这些信息存储在会话中。 在passport.js的configuration页面上 ,我不太了解以下代码块的要点: passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); }); 基本上,每次用户提出请求或访问页面时,都会向DB提出请求并检索信息。 有什么意义? 它使应用程序变慢。 当serializeUser被调用时(即信息存储在会话中),不应该检索数据库的信息吗? 我已经读过,在session中存储太多的信息可能会减慢应用程序。 什么是“太多”? 多less会减慢应用程序? 有人知道是否有testing吗? 我的应用程序页面需要一组关于我的用户的不同数据(例如,主页只需要他的名字,而configuration文件页面将需要一切,另一页需要知道他拥有的汽车等)。 如果passport.authenticate检查用户是否存在于数据库中(因此限制对数据库的读取请求大约为一个),或者只在会话中存储他的ID,并让我的页面向数据库在必要时? 我有另一个问题:在注册过程中,我首先让用户login他的Google帐户,我在某处存储他的个人资料的详细信息,让他填写一个额外信息的表格,然后我将所有内容插入到数据库中。 问题是我不知道如何正确存储他的Google帐户的详细信息,直到他们被插入数据库。 目前,我将它们存储在session ,然后在插入成功时删除它。 更具体地说,当我的数据库中找不到现有用户时,我在我的passport.authenticatecallback中: return done(null,false,userInfo); 因此,用户没有通过身份validation,我有两个问题:我必须存储该userInfo ,直到用户注册,我必须在注册完成后使用req.login() “手动”login他。 我应该允许他login自己的Google帐户后进行身份validation吗? 如果他没有完成注册,会不会对我造成安全问题? 最后,我读了关于使用Reddis。 这会帮助我解决这些问题吗? 非常感谢你 !

如何使用NodeJs的会话variables?

我有以下的NodeJS代码: let sql = `SELECT box_id, cubby_id, occupied, comport FROM box WHERE longestDimension = ? AND LOWER(box_id) = LOWER(?)`; connection.query(sql, [boxSelectedDimension, boxSelectedValue] , function(err, rows, fields) { if (!err) { for(var i=0; i< rows.length; i++) { // Make the comparaison case insensitive if (rows[i].occupied == `unoccupied`) { console.log("free"); var comport = rows[i].comport; var command = […]

在多个dynos heroku应用程序上设置快速应用程序的会话

我已经使用express(node.js)+ mongodb在单个Heroku dyno上实现了一些用户authentication,一切工作正常。 然而,当我增加dynos的数量(超过1),我无法login,我一直在我的login页面redirect,这意味着我的会议尚未设置。 这是我的代码: checkCookies = function(req,res,next){ if(req.session.user){ res.locals.user = req.session.user; next(); } else{ res.redirect('/login'); } }; app.use(express.cookieParser()); app.use(express.session({ secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK', cookie: {httpOnly: true, maxAge:14*24*60*60*1000} })); 使用mongodb处理express / node.js上共享会话的最佳解决scheme是什么?

连接+ SessionSocket.io +护照:无法通过密钥查找会话

我在我的应用程序中使用connect , passport和session.socket.io模块。 在session.socket.io的connection事件中,我收到一个错误: could not look up session by key: connect.sid 情况就像这样 我的服务器端代码是: var mod_http = require('http'); var mod_connect = require('../../lib/node_modules/connect'); var mod_connectRoute = require('../../lib/node_modules/connect-route'); var mod_ejs = require('../../lib/node_modules/ejs'); var mod_SessionSockets = require('../../lib/node_modules/session.socket.io'); var mod_passport = require('../../lib/node_modules/passport'), LocalStrategy = require('../../lib/node_modules/passport-local').Strategy; var mod_fs = require('fs'); var app = mod_connect(); var cookieParser = mod_connect.cookieParser('your secret sauce'), […]