[英]A cookie is set at location `/set-cookie` but cannot be retrieved at `/user` using express.js
I have a node.js app hosted on firebase. 我在Firebase上托管了一个node.js应用程序。 However where it is hosted should not matter too much here as I am simply trying to store some information in cookies in the
/set-cookie
path so it can be accessed in the /user
path. 但是,它的托管位置在这里应该没有太大关系,因为我只是试图在
/set-cookie
路径中的cookie中存储一些信息,以便可以在/user
路径中对其进行访问。 Relevant code in index.ts
here: 此处
index.ts
相关代码:
// create HTTP server
const app = express();
// use json form parser middleware
app.use(bodyParser.json());
// use query string parser middlware
app.use(bodyParser.urlencoded({ extended: true }));
// cookies
app.use(cookieParser());
app.use(cookieSession({
name : 'session'
, keys : ['abigsecret', 'anothersecret']
, maxAge : 100 * 60 * 60 * 1000
}));
// setting the cookie here
app.get('/set-cookie', (req,res) => {
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });
res.send('cookie set...');
}})
// And I would like to access it here
app.get('/user' , (req, res) => {
console.log('cookies: ', req.cookies)
res.render('pages/user')
});
Of course this is not working as intended. 当然,这不能按预期工作。 since on the console I do not see the cookie I set in
/set-cookie
, but rather some client side cookie that was passed to the server. 因为在控制台上我看不到我在
/set-cookie
中/set-cookie
,而是看到一些传递给服务器的客户端cookie。 What is the way to set cookies so that I can access it elsewhere? 设置cookie以便我可以在其他地方访问的方法是什么?
What I am seeing on the console is this when I navigate to '/user` after '/get-cookie' 当我在'/ get-cookie'之后导航到'/ user`时,在控制台上看到的是这个
info: cookies: { _ga: 'GA1.1.1192529393.1524186034',
ss_cvr: '5407c247-08f6-4b6d-8b27-e623c7788eef|1523239108805|1524436640490|1524443386060|46' }
info:
but I should be seeing some version of : 'rememberme', '1',
correct? 但我应该看到一些版本:
'rememberme', '1',
吗?
The following is a full example that works for me. 以下是适用于我的完整示例。
server.js server.js
// create HTTP server
const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session');
const pug = require('pug');
const app = express();
app.set('views', './views');
app.set('view engine', 'pug');
// use json form parser middleware
app.use(bodyParser.json());
// use query string parser middlware
app.use(bodyParser.urlencoded({ extended: true }));
// cookies
app.use(cookieParser());
app.use(cookieSession({
name : 'session'
, keys : ['abigsecret', 'anothersecret']
, maxAge : 100 * 60 * 60 * 1000
}));
// setting the cookie here
app.get('/set-cookie', (req,res) => {
res.setHeader('Cache-Control', 'private');
res.cookie('__session', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });
res.send('cookie set...');
});
// And I would like to access it here
app.get('/user' , (req, res) => {
console.log(req.cookies);
res.render('pages/user', {cookies: req.cookies})
});
app.listen(3000, () => { console.log('Listening on port 3000')});
Then views/pages/user.pug: 然后views / pages / user.pug:
doctype html
html
body
h1 Rememberme => #{cookies.__session}
Navigating in a browser first to http://localhost:3000/set-cookie and then to http://localhost:3000/user works for me. 首先,在浏览器中导航至http:// localhost:3000 / set-cookie ,然后导航至http:// localhost:3000 / user对我有用。 The console.log(req.cookies) includes the remember me and passing it into the template also works.
console.log(req.cookies)包括“记住我”,并将其传递到模板中也可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.