Node.js 如何使用express framework在节点js中设置cookie?
在我的应用程序中,我需要使用express framework设置cookie 有人能帮我做这件事吗Node.js 如何使用express framework在节点js中设置cookie?,node.js,cookies,express,Node.js,Cookies,Express,在我的应用程序中,我需要使用express framework设置cookie 有人能帮我做这件事吗 var express = require('express'), http = require('http'); var app = express(); app.configure(function(){ app.use(express.cookieParser()); app.use(express.static(__dirname + '/public'));
var express = require('express'), http = require('http');
var app = express();
app.configure(function(){
app.use(express.cookieParser());
app.use(express.static(__dirname + '/public'));
app.use(function (req, res) {
var randomNumber=Math.random().toString();
randomNumber=randomNumber.substring(2,randomNumber.length);
res.cookie('cokkieName',randomNumber, { maxAge: 900000, httpOnly: true })
console.log('cookie have created successfully');
});
});
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(5555);
在Express中使用中间件的顺序很重要:前面声明的中间件将首先被调用,如果它能够处理请求,那么后面声明的任何中间件都不会被调用 如果
express.static
正在处理请求,则需要向上移动中间件:
//我们需要cookieParser中间件才能处理Cookie
use(express.cookieParser());
//放一块饼干
应用程序使用(功能(请求、恢复、下一步){
//检查客户端是否发送了cookie
var cookie=req.cookies.cookieName;
如果(cookie==未定义){
//否:设置一个新的cookie
var randomNumber=Math.random().toString();
随机数=随机数。子字符串(2,随机数。长度);
res.cookie('cookieName',randomNumber,{maxAge:900000,httpOnly:true});
log('cookie创建成功');
}否则{
//是的,饼干已经出现了
log('cookie存在',cookie);
}
next();//
设置Cookie?
读取Cookie?
演示
const express('express')
, cookieParser = require('cookie-parser'); // in order to read cookie sent from client
app.get('/', (req,res)=>{
// read cookies
console.log(req.cookies)
let options = {
maxAge: 1000 * 60 * 15, // would expire after 15 minutes
httpOnly: true, // The cookie only accessible by the web server
signed: true // Indicates if the cookie should be signed
}
// Set cookie
res.cookie('cookieName', 'cookieValue', options) // options is optional
res.send('')
})
并不是完全回答你的问题,但我在寻找一个问题的答案时遇到了你的问题。也许它会帮助其他人
我的问题是Cookie是在服务器响应中设置的,但不是由浏览器保存的
服务器响应返回时设置了cookies:
Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT
我就是这样解决的
我在客户端代码中使用了fetch
。如果您没有在fetch
选项中指定凭据:“include'
,则cookie既不会发送到服务器,也不会由浏览器保存,即使服务器响应设置了cookie
例如:
var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
return fetch('/your/server_endpoint', {
method: 'POST',
mode: 'same-origin',
redirect: 'follow',
credentials: 'include', // Don't forget to specify this if you need cookies
headers: headers,
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe'
})
})
我希望这对某人有帮助。设置一个cookie:
res.cookie('cookie', 'monster')
阅读cookie:
(使用中间件)
在express中设置cookie很容易
首先安装cookie解析器
使用中间件
设置cookie
访问那个cookie
完成!您如何验证cookie是否未设置?您是否检查了浏览器收到的响应标题?@NilsH我添加了日志语句。如果设置意味着它将显示为“cookie已成功创建”…确定,则您的中间件未被调用,或者之前的一些语句出现异常。如果我删除了“app.u”se(express.static(uu dirname+'/public'))“这行表示它设置了cookie。我还有一个问题,在设置cookie之前,我如何检查cookie是否存在?我编辑了我的答案,向您展示了如何检查cookie是否已设置。您的页面上可能有一些JS和/或CSS文件。这些文件将由express.static
处理它们在中间件之后。因此,对于每个JS或CSS文件,都会调用代码。它没有设置cookie 8次,而是说cookie已经存在。这是意料之中的。请注意,cookie解析器现在应该单独安装。请参阅,我已在浏览器中检查了我的post请求,但此字段与post请求不符?如果使用XHR或J查询,使用'withCredentials:true'代替。嗨,你能说什么是signed:true吗?如果你建议将cookie设置为sign,那么重要的是要注意req.cookie将返回空。你只能从req.signedCookies检索签名cookie。你还需要添加以下内容:const app=express()app.use(cookieParser())
var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
return fetch('/your/server_endpoint', {
method: 'POST',
mode: 'same-origin',
redirect: 'follow',
credentials: 'include', // Don't forget to specify this if you need cookies
headers: headers,
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe'
})
})
res.cookie('cookie', 'monster')
req.cookies['cookie']
npm install cookie-parser
const cookieParser = require('cookie-parser');
app.use(cookieParser());
res.cookie('cookieName', '1', { expires: new Date(Date.now() + 900000), httpOnly: true })
console.dir(req.cookies.cookieName)