📜  Node.js 中的 HTTP Cookie

📅  最后修改于: 2022-05-13 01:56:22.032000             🧑  作者: Mango

Node.js 中的 HTTP Cookie

Cookie 是存储在客户端并与服务器请求一起发送到客户端的小数据。 Cookie 具有多种功能,它们可用于维护会话并在您的 Web 应用程序中添加特定于用户的功能。为此,我们将使用 npm 的cookie-parser模块,它提供了用于解析 cookie 的中间件。
首先将命令提示符的目录设置为项目的根文件夹并运行以下命令:

npm init

这将询问您有关您的应用程序的详细信息,最后将创建一个package.json文件。
之后运行以下命令,它将安装所需的模块并将它们添加到您的 package.json 文件中

npm install express cookie-parser --save

package.json 文件如下所示:

之后,我们将通过在根目录的 app.js 文件中编写以下代码来设置基本的 express 应用程序。

let express = require('express');
//setup express app
let app = express()
  
  
//basic route for homepage
app.get('/', (req, res)=>{
res.send('welcome to express app');
});
  
//server listens to port 3000
app.listen(3000, (err)=>{
if(err)
throw err;
console.log('listening on port 3000');
});

之后,如果我们运行命令

node app.js

它将在端口 3000 上启动我们的服务器,如果转到 url:localhost:3000,我们将得到一个显示消息的页面:

welcome to express app

这是启动服务器后 localhost:3000 页面的屏幕截图:

所以到目前为止,我们已经成功设置了我们的 express 应用程序,现在让我们从 cookie 开始。

首先,对于 cookie,我们需要在 app.js 文件中导入模块,并像其他中间件一样使用它。

var cookieParser = require('cookie-parser');
app.use(cookieParser());

假设我们有一个用户,我们想在 cookie 中添加该用户数据,那么我们必须使用以下代码将该 cookie 添加到响应中:

res.cookie(name_of_cookie, value_of_cookie);

这可以通过以下示例来解释:

let express = require('express');
let cookieParser = require('cookie-parser');
//setup express app
let app = express()
  
app.use(cookieParser());
  
  
//basic route for homepage
app.get('/', (req, res)=>{
res.send('welcome to express app');
});
  
//JSON object to be added to cookie
let users = {
name : "Ritik",
Age : "18"
}
  
//Route for adding cookie
app.get('/setuser', (req, res)=>{
res.cookie("userData", users);
res.send('user data added to cookie');
});
  
//Iterate users data from cookie
app.get('/getuser', (req, res)=>{
//shows all the cookies
res.send(req.cookies);
});
  
//server listens to port 3000
app.listen(3000, (err)=>{
if(err)
throw err;
console.log('listening on port 3000');
});

因此,如果我们在设置 cookie 之前重新启动服务器并对路由发出 get 请求:localhost:3000/getuser,如下所示:

向 localhost:3000/setuser 发出请求后,它会将用户数据添加到 cookie 并提供如下输出:

现在,如果我们再次向 localhost:3000/getuser 发出请求,因为该路由正在使用req.cookies从 cookie 中迭代用户数据,因此输出将如下所示:

如果我们在 cookie 中推送了多个对象,那么我们可以使用req.cookie.cookie_name访问特定的 cookie。

添加带有过期时间的 Cookie
我们可以添加一个带有一些过期时间的cookie,即在该时间之后cookie 将被自动销毁。为此,我们需要在设置 cookie 时向 res.cookie 对象传递一个额外的属性。
可以使用以下两种方式中的任何一种来完成:

//Expires after 400000 ms from the time it is set.
res.cookie(cookie_name, 'value', {expire: 400000 + Date.now()});

//It also expires after 400000 ms from the time it is set.
res.cookie(cookie_name, 'value', {maxAge: 360000});

销毁 cookie:
我们可以使用以下代码销毁 cookie:

res.clearCookie(cookieName);

现在让我们创建一个注销路由,它将从 cookie 中销毁用户数据。现在我们的 app.js 看起来像:

let express = require('express');
let cookieParser = require('cookie-parser');
//setup express app
let app = express()
  
app.use(cookieParser());
  
  
//basic route for homepage
app.get('/', (req, res)=>{
res.send('welcome to express app');
});
  
//JSON object to be added to cookie
let users = {
name : "Ritik",
Age : "18"
}
  
//Route for adding cookie
app.get('/setuser', (req, res)=>{
res.cookie("userData", users);
res.send('user data added to cookie');
});
  
//Iterate users data from cookie
app.get('/getuser', (req, res)=>{
//shows all the cookies
res.send(req.cookies);
});
  
//Route for destroying cookie
app.get('/logout', (req, res)=>{
//it will clear the userData cookie
res.clearCookie('userData');
res.send('user logout successfully');
});
  
  
//server listens to port 3000
app.listen(3000, (err)=>{
if(err)
throw err;
console.log('listening on port 3000');
});

要销毁 cookie,请访问以下链接:<3000 id="attachment_510034" align="aligncenter" src="https://media.geeksforgeeks.org/wp-content/uploads/Screenshot-39-4.png" alt class="size-medium wp-image-510034">用户退出[/caption]

要检查 cookie 是否被破坏,请向 localhost:3000/getuser 发出 get 请求,您将获得一个空的用户 cookie 对象。

这是关于使用 cookie-parser 中间件的 HTTP cookie 的基本使用。 Cookie 可以以多种方式使用,例如维护会话并根据每个用户之前在网站上的交易为他们提供不同的网站视图。


3000>