Tag: 会话

Connect的会话中间件的签名cookie如何工作?

我想要解释一下connect.sid cookie如何在Connect Node.js框架中工作。 我注意到他们是形成的, s:hash.signature 我不明白如何使用签名,当散列能够被用来从内存存储或redis存储访问会话数据。 另外,我不明白为什么s:甚至在cookie中; 这是什么目的。 我听说签名被用来“签名”散列。 究竟是“签名”还是“签名”? 我也需要对这个过程进行解释。 谢谢!

关于express.cookieSession()的几个问题

在我的node.js服务器(运行express和socket.io )上,当一个人连接时,我将它们添加到一个数组中,并将它们在数组中的位置保存到它们的会话中,这样每个连接都可以访问它们自己的信息,如下所示: session.person_id = people.length; session.save(); people.push(new Person()); //people[session.person_id] => Person 我在会话中唯一保存的是person_id 。 我一直在使用express.session()来处理这个问题,直到我开始将信息发送给一次连接的所有人。 当我循环连接并获得他们的会话时,有时(我不知道如何计算错误) session存在,但不是session.person_id 。 无论如何,我希望通过改变我存储会议的方式,它可以帮助我找出我的问题。 所以我有几个问题,我无法在任何地方find答案。 从express.cookieSession()的cookie存储在哪里? 服务器端还是客户端? express.cookieSession()是否允许在负载均衡器后面运行多个服务器? 使用express.cookieSession()时,用户是否可以操作会话数据?

req.session是不确定的?

我正在尝试最近学习node.js 而sails.js看起来很有希望。 我只是安装帆项目,一切正常。 除了req.session是undefined 。 这是我的configuration: module.exports.session = { secret: '0f18410746715474fa79f357f6dedd75', adapter: 'redis' }; 当我尝试使用, req.session.user = 'admin' 我发现req.session没有定义。

如何使用Express和MongoStore从MongoDB集合中find一个会话

我正在使用Node / Express / Mongo实现会话存储。 我的问题是,我无法检索我的sessions收集任何会议,所以我无法确定用户是否已经login。 我正在使用MongoSkin,MongoStore和mongo-connect,但我不介意使用Mongoose和其他工具。 这是我的debugging输出: // Check whether the current user has a session. // If so, adds "currentUser" to the request. // Else, redirect to the login page. function loadUser(req, res, next) { console.log("loadUser: checking loadUser…"); var db = req.db; console.log("current req.session.token:"); console.log(req.session.token); console.log("current req.session:"); console.log(req.session); if (req.session.token) { // Look […]

基于令牌的身份validation和浏览器上的会话/本地存储

好吧,我想实现一个networking应用程序,使用身份validation机制来个性化网站上的用户体验,但同时我有一些问题,我想清除。 因此,一开始,用户将以他们的用户名和密码login(现在让我们忘记第三方authentication,并假设有一个适当的注册页面),并成功login后,服务器将生成一个令牌,用于从该特定用户的浏览器。 接下来,我正试图validation我的理解并提出相关的问题。 据我所知,在服务器端使用令牌的速度要快得多(如果你愿意的话,cpu密集程度要低一些),因为现在不需要解密存储在服务器上的密码,并将其与使用请求(例如使用bcrypt ),但相反,检查要简单得多,归结为令牌是否过期。 作为额外的好处,用户名和密码的敏感信息不会重复传输。 检查点1.我们希望应用程序在用户自愿或不小心按下“刷新/重新加载”时强健,这样令牌在刷新后仍然可以使用(而不必再用凭证login)。 现在很清楚,要么我们必须使用cookie(即会话),要么在客户端使用会话存储或本地存储。 有另一种方法吗? 据我所知,答案是否定的(是的,本地存储有不同的select,如Web存储,Web SQL数据库,索引数据库和文件访问,但这是超出了问题)。 这是对还是错? 而且,在客户端处理令牌(存储/调用)最常用的做法是什么? 检查点2.令牌到期。 据我所知,这个想法是,每次使用有效的令牌时,该特定令牌的到期时间被更新(例如7或10天后)。 这对于定期访问该站点的用户仅需要login一次就具有很好的好处。 但是,不利之处似乎在于,对于相同的用户,令牌保持不变 – 可能永远不变(除非令牌过期)。 那么问题是,这是安全的吗? 这里的另一个想法是更新后端的令牌,在客户端发送更新的令牌,更新浏览器的本地存储器上的令牌,而对最终用户而言,所有内容都是透明的。 这是常见的做法吗? 我可以看到,现在在服务器端,需要对生成的令牌保持谨慎(请参阅下面的场景)。 是否有共同的做法来处理这个(如果需要处理的话)? (假设用户A有两台设备A1和A2,使用令牌TA1,从现在开始7天到期,用户B有设备B1使用令牌TB1,从现在起7天后到期,所有的令牌都存储在某种本地存储器中。六天后(即实际到期前一天),当用户A正在使用设备A1时,TA1更新为TA2,同样在当天,TB1更新为TA1,现在如果用户A使用设备A2,令牌(TA1),但在使用API​​时将以用户B身份进行身份validation!) 检查点3.我一直认为基于令牌的authentication就是这样。 通过http请求的头部发送一个令牌,这就是全部。 显然,如果你也发送用户名,那么我们就避免发送密码,而且我们也避免了上述的问题。 不过,这种方法我不太喜欢。 毕竟,现在令牌作为一个密码。 唯一的节省是在服务器端匹配证书时的解密(即cpu-cycles)。 这种方法是废话还是什么? 检查点4.如果将来想创build智能手机或平板电脑的专用应用程序,则在请求的标题上使用标记(应该是非常容易),而不是依赖于Cookie和会话(请参阅cookie容器) 。 目前这对我来说很小,但这是真的吗? 我认为上面的问题是实现不可知的,但是如果你想给开发指针,我将使用node.js。

socket.io不存储会话

我有使用node.js和socket.io的应用程序。 我想在会话中存储一些信息。 我做了一个例子。 但是我的代码不起作用。 当我运行脚本和刷新页面时,我看到: NaN 2 接下来,当我刷新页面时,我可以看到 NaN 2 NaN 2 所以会话不存储。 我如何修复我的代码? var Session = require('express-session'), SessionStore = require('session-file-store')(Session); var session = Session({ secret: 'pass', resave: true, saveUninitialized: true }); var config = require("./config.json"); var express = require('express'); var app = express(); var socketio = require('socket.io'); var server = app.listen(3000, function(){ console.log('Start') }); […]

护照req.isAuthenticated()总是返回fasle

我正在尝试使用快速会话来login用户。 我希望用户能够访问个人资料页面并查看他们的用户数据(如果他们已经login)。 在我的routes.js的第9行:req.isAuthenticate()返回false,即使我已经成功login一个用户。 我的最终目标是req.user,护照保存到会话中,在/ passport GETpath中定义,以便我可以将其作为数据发送到我的模板引擎。 https://gist.github.com/anonymous/f6ecb472eb082775181e#file-routes-js-L9 提前致谢

与sqlite Express.js会话

我想用Express.js设置一个轻量级的应用程序。 我想用Sqlite3来存储。 我需要某种types的会话pipe理,并尝试使用快速指南文档中描述的会话pipe理模块(CoffeeScript) g.app.configure -> g.app.set 'views', "#{__dirname}/views" g.app.set 'view engine', 'jade' g.app.use g.express.bodyParser() g.app.use g.express.cookieParser() g.app.use g.express.session(secret:'cruel') g.app.use g.express.methodOverride() g.app.use g.app.router g.app.use g.express.static "#{__dirname}/public" 现在我想将会话存储在sqlite3中或作为项目path中的文件以某种方式存储。 我find的所有示例都使用不同种类的NoSql数据库。 任何人都可以从哪里find其他会话存储模块,甚至是如何实现其中一个。

会话Cookie仅用于特定路由

我正在使用Connect.js和连接会话模块来pipe理会话cookie。 我注意到Connect在除静态文件之外的所有路由上都设置了会话cookie。 问题是我发送之前处理一些静态文件,如JS和CSS文件,所以我不能使用Connect的内置静态服务器,这意味着连接会话为这些文件设置会话Cookie。 由于这些文件将被包含在外部网站上,我不希望他们发送cookie。 是否有可能只为特定的路线设置会话cookie?

在套接字之间共享会话。 (从所有活动选项卡注销用户)

我正在使用node.js express框架构build简单的学习聊天应用程序。 我有一个问题。 如果用户有多个选项卡处于活动状态,并且他在一个选项卡上注销。 我想closures连接到其他选项卡,并redirect到login页面。 但是我遇到了一个问题。 即使用户注销了其他套接字会话没有改变(我正在使用passport.socketio包,所以我有当前用户在socket.handshake.user)。 我做错了什么? 提前致谢。