Articles of cookie

如何从node.js中的请求模块获取cookie?

function getCookies(){ request('http://google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(response.headers); } }) } 结果 { date: 'Fri, 11 Dec 2015 07:15:50 GMT', expires: '-1', 'cache-control': 'private, max-age=0', 'content-type': 'text/html; charset=EUC-KR', p3p: 'CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."', server: 'gws', 'x-xss-protection': '1; mode=block', 'x-frame-options': 'SAMEORIGIN', […]

如何使用Node.js / Express + Passport + Websockets进行身份validation?

我正在构build一个使用Passport.js和OAuth策略进行身份validation的angular2-login-seed 。 很显然,使用这些工具进行身份validation的默认方法是使用通过express签名的HTTP cookie。 从我所知道的护照pipe理实际的Set Cookie头,以便express可以通过request.isAuthenticated()validation每个后续请求,并通过req.session.passport.dataHere访问由护照设置的数据。 我想通过websockets将实时数据整合到应用程序中。 这当然意味着从服务器到客户端的套接字stream。 这个通信完全独立于普通的HTTP服务器请求,意思是: 它不包含所有HTTP请求包含的HTTP cookie Express不会与套接字进行交互,它使用后端使用的任何实现(sock.js,socket.io)进行pipe理。 这使得简化表示HTTP请求之间的authentication以及websocket数据到后端是困难的,因为它们是单独的通信方法。 从我的研究来看,这给了我两个select。 其中之一是使用库来给我的套接字实现(最好是socket.io上的sock.js,但我需要做更多的研究)访问快速会话。 然后,我可以validation套接字连接,但我想要的。 问题是我不知道如何将快速cookie从前端的stream,因为JavaScript无法访问它(HTTP只有cookie)。 我见过的另一个常见解决scheme是使用JWT(JSON Web Tokens)。 围绕这个存储的实现将JWT存储在前端的localstorage中。 这是SPA(在我的情况下,Angular2服务)可以发送每个请求“无状态”服务器身份validation,我们可以通过websocket发送validationwebsocket连接(前端JS显然有权访问本地存储) 。 想到这个实现时,想到了几件事情: Passport OAuth策略甚至有可能使用JWT而不是常规会话信息? 这将涉及什么样的修改? 从我可以告诉Passport策略使用某种forms的OAuth1或OAuth2父策略进行身份validation,默认使用Cookie。 将这个重要的信息存储在本地存储中将会打开应用程序直到安全漏洞(XSS,CSRF等) 如果是这样,我见过的最常见的解决方法是将JWT存储在一个cookie中,这样它不能被轻易访问,欺骗或伪造。 但是,这使我回到了之前使用智威汤逊的地位,所以不用担心。 这是否意味着我不得不在后端使用某种状态pipe理存储(例如Redis)来pipe理JWT主体的身份validation和解码? (我对Redis一无所知,等等)。 连接服务器HTTP请求和套接字数据之间的身份validation的想法很奇怪,但对正确authentication一个套接字连接看起来至关重要。 我有点惊讶一个更简单的方法不存在。 我已经做了一些研究,并且看到了诸如socketio-jwt , express-jwt等等的东西,但是我不知道这是否可以用Passport策略进行可pipe理的转换,或者如果打开快速会话数据到套接字的实现,或者如果我正在做这一切都错了! 任何帮助或指导将非常感谢。

会话cookie在Electron中不起作用

我正在考虑在我正在构build的Electron [0]应用程序中实现一个login系统,但是在处理会话的过程中遇到了困难。 基本上我想存储用户会话,以便在应用程序重新启动之间持续存在(如果启用了“记住我”function)。 我必须利用现有的后端与cookie身份validation,我不能改变任何东西。 从Session对象的Electron文档[1]我收集到,我应该使用像persist:someName这样的分区,以便拥有一个持久存储,但是在应用程序重新启动之间,这看起来并没有持续存在。 我目前设置cookie的方式如下: // main-process/login.js const session = require('electron').session; const currentSession = session.fromPartition('persist:someName').cookies; currentSession.set({ name: 'myCookie', url: 'https://www.example.com', value: 'loggedin=1', expirationDate: 1531036000 }, function(error) { console.log('Cookie set'); if (error) { console.dir(error); } }); 运行后,我看到Cookie set输出,但重新启动应用程序并运行以下代码: // main.js const session = require('electron').session; const currentSession = session.fromPartition('persist:someName').cookies; currentSession.get({}, function(error, cookies) { console.dir(cookies); if (error) […]

ExpressJS设置/获取/使用Cookie

请求中无法获得设置的cookie。 我设置了我的cookie response.cookie('name', 'My name'); 我想以这种方式得到我的cookie,之前它工作,但我改变了快速configuration,我不知道什么似乎是现在的问题。 request.cookies is and empty Object 我的快捷configuration: var express = require('express'), api = require('./routes/api'); var app = express(); app.configure(function () { app.set('port', process.env.PORT || 3000); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); //app.use(express.bodyParser()); app.use(express.compress()); // New call to compress content app.use(express.cookieParser()); app.use(express.session({secret: 'secret'})); app.use(app.router); app.use(express.methodOverride()); //app.use(express.static(__dirname + '/public')); }); app.all('*', function(req, res, next) { […]

如何通过BrowserSync中间件设置会话cookie?

我最近从Express Web应用程序移到了Nodejs的BrowserSync应用程序。 使用Express,如果我想设置一个cookie,我的configuration看起来是这样的: var express = require('express'); var session = require('express-session'); var finalhandler = require('finalhandler'); var serveStatic = require('serve-static'), serve = serveStatic(__dirname); var app = express(); app.use(session({ // see https://github.com/expressjs/session secret: 'keyboard cat', resave: false, saveUninitialized: false })) .use(function(req, res, next) { res.cookie('myCookie', 'my cookie value'); var done = finalhandler(req, res); serve(req, res, done); }); […]

在不同的端口之间共享Cookie

我有一个应用程序1(C#)托pipe在端口:8030和应用程序2(nodejs)托pipe在端口:3030。 两者都在本地主机上。 请求工作stream程如下: 浏览器向应用程序1发送请求 应用程序1发回一些cookie 稍后在浏览器上发送请求到应用程序2 ^问题是最后一步,cookies不包含在请求中。 我已经尝试/理解的事情: 我知道这是一个同源策略限制,并且由于不同的端口号,浏览器将它们视为不同的域。 在应用程序1(它使用System.Web.HttpCookie)我试图设置域为端口特定(“127.0.0.1:3030”),但似乎浏览器不接受或忽略它。 //c# code var testCookie1 = new HttpCookie("Test", "testValue"); testCookie1.Domain = "127.0.0.1:3030"; testCookie1.Path = "/"; testCookie1.Expires = DateTime.Now.AddDays(1); Response.SetCookie(testCookie1); var testCookie2 = new HttpCookie("Test2", "testValue2"); testCookie2.Domain = "127.0.0.1"; testCookie2.Path = "/"; testCookie2.Expires = DateTime.Now.AddDays(1); Response.SetCookie(testCookie2); 服务器发送一个附有端口号的cookie,但浏览器似乎忽略了它。 这里是我的阿贾克斯调用: var request = $.ajax({ url: 'http://127.0.0.1:3030/SomeTask', type: 'POST', crossDomain: […]

NodeJS cookie不能在Express 4中使用会话

我已经将我的NodeJS应用程序更新到Express 4.0,现在除了快速会话cookie之外,我无法设置自己的Cookie。 这个问题只发生在任何会话的第一个请求,当用户重新加载页面的自定义cookie在那里。 var express = require('express'); var routes = require('./routes'); var http = require('http'); var path = require('path'); var session = require('express-session'); var app = express(); app.set('port', process.env.PORT || 3000); app.use(express.static(path.join(__dirname, 'public'))); app.use(require('body-parser')()); app.use(require('method-override')()); app.use(require('cookie-parser')('cookie-secret')); //app.use(session({ secret: 'secret', key: 'sid'})); //uncomment this to see the problem app.get('/', function(req, res, next) { res.cookie('testing', 'test'); //this […]

Cookie分析器与passport.js的使用仍然需要?

在node.js找不到关于一般passport.js安装和声明的任何信息(在passport.js站点上)。 在教程中,我总是看到express session中间件和cookie-parser按照passport要求进行陈述,但session文档( https://github.com/expressjs/session )指出: 自1.5.0版本以来,不再需要使用cookie分析器中间件来使这个模块正常工作。 这个模块现在直接在req / res上读取和写入cookie。 如果这个模块和cookieparsing器之间的秘密不一样,使用cookieparsing器可能会导致问题。 所以,我需要使用session和cookie-parser的passport出于某种原因,或者我只能使用session ,我需要调整一些东西呢?

一起使用cookieParser()和cookieSession()?

cookieParser()使我们可以select使用秘密语句来签名cookie,这对防止篡改很有帮助。 我知道cookie是用特殊值签名的,以防篡改。 我刚刚发现cookieSession(),我发现它是一个很好的替代服务器存储的cookie(我只存储{ loggedIn = true, userId=763487246824632} ,它永远不会增长)。 但是…我发现为cookieParser()设置一个“秘密”会破坏事物, 如果秘密语句匹配 ,cookieSession()将停止工作。 原因似乎是,如果cookie使用相同的秘密进行签名,那么cookieParser()实际上会将其parsing。 奇怪的是,一旦cookieParser()完成了工作,并且具有相同的签名秘密 ,则会话被设置为: { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true } } 而不是: { testing: 'OOO' } (每次重新加载一个'o')所以… 我的分析是否正确? 你知道为什么会话设置为奇怪的{ cookie对象,如果秘密句子匹配? 芝加哥商业交易所。

我应该使用什么express.cookieParser()秘密?

文档说它应该是保密的,但是我的代码在github上发布。 app.use(express.cookieParser(crypto.randomBytes(64).toString()))工作,或者应该在服务器重新启动时保密? 我应该把密码存储在磁盘上吗? 它需要多大的秘密?