![](/img/trans.png)
[英]Cookies handling using javascript or Express.js or node.js?
[英]Cookies undefined on node js/express (localhost)
我猜是一个新手问题。 我想在我的快递网站上设置并获取Cookie。
cookieParser已设置并且似乎正在运行。 但是我的cookie始终是不确定的。 那么有什么问题呢? Cookies在本地主机上不起作用吗? 我可以在Chrome控制台中访问所有cookie。
我已经尝试了两个httpOnly:false / true。
这是我的代码:
var express = require('express'),
exphbs = require('express-handlebars'),
bodyParser = require('body-parser'),
cookieParser = require('cookie-parser'),
request = require('request'),
livereload = require('express-livereload'),
port = Number(process.env.PORT || 3000);
var log = require('./lib/log.js'));
var app = express();
livereload(app, config = {watchDir: process.cwd()});
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
app.use(express.static('public'));
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true}));
app.get('/', function(req, res) {
res
.cookie('cart', 'test', {maxAge: 900000, httpOnly: false})
.render('index');
console.log(res.cookie.cart);
});
app.listen(port, function() {
log.clear();
log.out('Express on http://localhost:' + port);
log.hr();
});
有什么线索吗?
也许您应该更改:
console.log(res.cookie.cart);
至:
console.log(req.cookies.cart);
我只是写了一个简单的示例来演示正在发生的事情:
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get('/', function(req, res) {
var oldCookie = req.cookies.test;
var newCookie = (oldCookie|0) + 1;
res.cookie('test', newCookie, {maxAge: 900000});
res.status(200).json({
newCookie: newCookie,
oldCookie: oldCookie,
reqCookie: req.cookies.test,
});
});
app.listen(3000, function () {
console.log('Listening on http://localhost:3000/');
});
运行它并使用浏览器访问http:// localhost:3000 /时,您将看到:
{"newCookie":1}
重新加载页面后,您将看到:
{"newCookie":2,"oldCookie":"1","reqCookie":"1"}
这是发生了什么:在第一个请求中,即使您在打印之前在处理程序中设置了cookie,也尚未真正设置它-它只是排队等待通过HTTP标头传递给客户端,如下所示:
Set-Cookie: test=1; Max-Age=900; Path=/; Expires=Wed, 21 Sep 2016 13:03:06 GMT
在第二个请求,你看到的旧值reqCookie
,并在新的价值newCookie
-这些值是不同的。 查看cookie不会更改您在请求中获得的cookie。 我什至包括了reqCookie
,它没有存储在变量中,而是在res.end()
调用期间直接从req.cookies
访问,以表明它没有更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.