Articles of session cookies

使用iisnode时保证CookieSession的安全

我通过使用iisnode与IIS使用节点,我有麻烦设置CookieSession选项secure:true 。 我在IIS上使用HTTPS,并将任何HTTPredirect到HTTPS。 但即使如此,如果我将cookieSession选项设置为secure:true ,那么login后会话将不会有任何内容。 secure:一个布尔值,指示cookie是否仅通过HTTPS发送(默认情况下为HTTP,HTTPS为默认情况下为true)。 我不得不使用secure:false来使其工作。 为什么?

快速会话:为什么在设置会话信息之前执行redirect?

还有一个“我刚刚开始学习node.js / express,现在我在这里卡住了”人。 我试过寻找答案,但我已经到了死胡同。 这是我的第一个Stackoverflow问题,所以请告诉我,如果我做了错误或非常规的事情。 我正在尝试创build一个POST请求,将一个用户对象保存到一个快速会话(在MongoDB上),并将您redirect到处理会话信息的URL。 问题是,在设置标题之前用户被redirect,并给出以下内容: Error: Can't set headers after they are sent. 这是我的代码。 我知道这是很多..对不起。 router.post() // Handler for POST requests from root page (/) router.post('/', function(req, res) { console.log("Router: A POST request for: \"/\" has been called!"); var username = req.body.username; var password = req.body.password; // Connect to database mongoose.connect(dbAddress); var db […]

设置浏览器cookie

我的问题:我的浏览器没有得到会话cookie设置。 这导致对服务器的所有请求不相互关联(例如1)进行身份validation,然后2)获取一些数据)。 背景/环境: 我正在构build一个有移动和networking端的产品。 我已经开发了这个网站,它的工作很好,所以现在我正在使用Cordova的移动应用程序(所有这些都是JavaScript)。 我想为网站使用与移动应用程序相同的后端。 在testing一切时,我只想在浏览器中运行我的应用程序,所以我不必一直模拟iOS设备,而是在浏览器中获得更好的debugging工具。 为了做到这一点,我运行一个简单的http服务器上的目录,所有我的html / css / js文件。 一切似乎都很好,直到我开始与服务器交互。 我的设置 : 服务器在localhost:3000上运行。 该cordova应用程序正在本地主机上:3001服务。 当移动应用程序加载时,它所做的第一件事是打到http://localhost:3000/api/v1/auth/isAuthenticated ,它返回{isAuthenticated: true|false} 。 端点所做的是无关紧要的。 与此相关的是,浏览器中的移动应用程序不会获取sessionId cookie,因此所有到localhost:3000上的服务器的请求都具有不同的sessionId,因此即使我能够正确地进行身份validation,下一个请求与authentication用户没有关联,因为它没有sessionId cookie。 我的问题:解决这个问题的好方法是什么? 我如何将cookie设置在刚刚触及端点的浏览器上? 我是否应该使用像oauth2orize这样的东西,并做一些令牌交换? 其他有趣的笔记: 我正在使用express.js会话。 实际上,我已经用最新的3.x版本和4.x的候选版本来尝试这个了。 这个伎俩也没有。 当我在iOS模拟器中模拟移动应用程序时,一切都很好(只是不是开发的最佳位置) 我使用CORS来允许我的localhost:3000响应来自localhost:3001的请求。 请求正在工作,这只是没有设置的cookie是问题。 鸭嘴兽是产卵的唯一哺乳动物,而不是分娩:) 谢谢!

使用Node.js,Passport进行服务器到服务器的身份validation

我有两个服务在不同的子域上运行:1)Node.js,Express,PassportJS,2)基于PHP。 这两个服务都暴露在同一个门户网站中,为了避免要求用户input凭证两次,我们从PHP服务器调用Node.jsloginAPI。 节点返回会话cookie( connect.sid ),我们转发这个客户端的域设置为<<rootdomain>>.com 。 现在,当客户端调用Node.js时,我们可以看到cookie被发送到Node,但仍然无法validation。 我已经validation了以下几点: 从PHP服务器到Node的loginAPI调用返回connect.sid cookie的成功,并将会话条目添加到Redis服务器(我们使用Redis来存储会话) Cookie在浏览器中正确设置 浏览器调用Node.js时connect.sid cookie发送到服务器 如果我们直接从客户端调用loginAPI,一切都按预期工作。 基本上独立的Node应用程序没有任何问题。 我很好奇节点是否使用用户代理,IP或什么来validationconnect.sid cookie? 或者它与Passport / Express会话参数值有关吗? 什么可能是错的? 仅供参考,目前网站没有在SSL上运行。 这是我的会议参数: store = new RedisStore({ port: 6379, host: 'localhost', client : redis }); var sess = { store: store, secret: 'some secret', rolling: true, cookie: { maxAge : 36000000, secure: false }, saveUninitialized: […]

访问我从护照JS获得的FB用户ID

我有一个问题,试图使用我从我创build的护照JS政策获得的FB用户ID。 在我的应用程序中,我让用户login到FB,并在我的数据库中创build了一个用户,如果没有匹配的话。 我有一个非常基本的节点JS应用程序,在这里我可以pipe理所有视图(现在使用hogan引擎)。 所以当我做我的app.js文件时: app.get('/myaccount', ensureAuthenticated, function(req, res){ console.log('– User ID:' + req.user.id ); res.render('myaccount', { user: req.user }); }); 我得到正确的userId。 例如我的是XXXXXXX8342620263。 但在客户端(我的hjs文件)我试图使用相同的userId,我得到非常相似,但不同的ID。 <script type="text/javascript"> $(document).ready(function() { // Populate the spends table console.log('==Populate the spends for my account ' + {{user.id}}); populateMyData({{user.id}}); }); </script> 对于我的帐户我得到XXXXXXX8342620264而不是XXXXXXX8342620263 。 这让我疯狂。 有什么build议么? 我什至试图做 var userId = {{user.id}}; userId–; 由于某种原因,我仍然得到相同的错误userId。

如何清除req.session清除节点js中的浏览器cookie?

我使用"express": "~4.14.0"用express-session保存用户名。 一旦用户login,我将把用户名保存在req.session.authorizedUser = username以将其显示在应用程序标题中。 当浏览器历史被清除或浏览器closures时,我想清除会话。 如果在进行这两个操作时有任何方法清除会话,请告诉我。 我曾尝试设置会话cookie的maxAge选项,如下所示,但它并不能反映出好的结果: app.use(session({ secret: "key test", resave: false, saveUninitialized: true, cookie: { secure: !true, path: '/', httpOnly: true, maxAge: null} }));

路由器中的Hapijs会话

有没有一种方法可以使用会话信息,在用户成功login时从数据库加载用户数据,并通过Hapijs服务器路由中的不同路由加载? index.js var Hapi = require('hapi'); var server = new Hapi.Server(); var routeManager = require('./routes/manager'); server.connection({ host: "localhost", port: 8000 }); server.register(require('hapi-auth-cookie'), function (err) { server.auth.strategy('base', 'cookie', { password: 'somesecret', cookie: 'app-cookie', isSecure: false }); }); server.route(routeManager.loginRoutes); server.start(function(){ console.log('application started running on: '+JSON.stringify(server.info.uri)); });` manager.js `var users = { john: { id: 'john', password: 'pass', […]

如何创build基于nodejs的url不同的会话?

我们的网站有两个部分: 1. admin (content management) 2. site pipe理部分将有url“/pipe理”和网站部分有url“/”。 例如:我的网站名称是www.example.com,那么pipe理部分的url是“www.example.com/admin”,网站的url是“www.example.com”。 我想创build基于url的会话意味着来自admin部分的请求将具有不同于来自site部分的请求的会话。 我该怎么做?

我应该如何在node.js上实现会话存储

我正在创buildjosi ,一个node.js的web框架。 我想添加会话存储。 什么是实施这个最好的方法? 我假设它可能必须基于cookie,但我有兴趣知道是否有其他框架有不同的方法。

更新/刷新快速会话

在我的应用程序中,如果用户未login,则会限制某些操作和页面的访问权限。我有: var restrict = function(req, res, next) { if (!req.user) { console.log("USER isn't logged in.") return res.status(403).send('Access or action denied, please log in'); } next(); } app.get('/stocks', restrict, MainHandler.findAllStocksFromUser); app.get('/stocks/:id', MainHandler.findStockByIdAndDates); app.put('/stocks/:id/stockActions', restrict, MainHandler.handleStockAction); 我本质上是试图每次客户端向服务器发出请求时刷新一个会话,以便服务器不会注销用户/不应该销毁会话。 对于testing,我希望会话过期/用户被注销,如果20秒后没有用户向服务器发出请求。 我有: app.use(session({secret: 'secret', saveUninitialized: true, resave: true, expires: new Date(Date.now() + (20000))})); 然后,我尝试使用中间件来每次使用请求时刷新到期date: // Session-persisted message middleware app.use(function(req, res, […]