Nodejs-Cookie的设置

本文介绍了Cookie在Web开发中的作用,特别是在用户登录状态的维护上。详细解释了客户端和服务器端设置及读取Cookie的方法,包括使用JavaScript封装的函数和Express框架配合cookie-parser组件的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在web开发的过程中 cookie 肯定需要接触的,一个典型的应用是关于用户登录的,如果用户登录之后,再关闭,下次打开该网页已经自动登录,这样就可以利用服务器端发送cookie到客户端,再客户端存下来就可以了,当然也可以客户端自己存储登录信息到cookie,然后再打开网页的时候,自动发送保存的用户信息到服务端进行验证,具体cookie用来干什么的,可以自己google一下。

目前我自己使用了两种方式进行cookie的设置和读取:

1。客户端利用函数自己存储

根据document.cookie的原理,封装一些cookie的操作函数如下:

function getCookie(name) {
    var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
    if (arr = document.cookie.match(reg))
      return (arr[2]);
    else
      return null;
  }
  

function setCookie (c_name, value, expiredays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
  };
  

function delCookie (name) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval = getCookie(name);
    if (cval != null)
     document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
  };

当需要存信息到cookie的时候,就可以调用setCookie就可以了,获取信息就调用getCookie, 删除信息就是delCookie.

以用户登录为例,可以存用户登录的用户名和密码(或者代表用户信息的其他格式)。当下次访问网页的时候,直接读取这些信息,发送到服务端去进行验证。

2。服务器设置cookie

express可以利用第三方组件cookie-parser去进行解析客户端来的req.cookies,也可以在返回信息给客户端的时候设置cookie,这样客户端在接受到这些信息的时候,就会将cookie信息自动保存到硬盘cookie里面,跟在客户端自己保存一样,不过要在客户端和服务器端做一下特殊的设置。

服务端设置:

const cookieparser = require('cookie-parser') 
var exp = express()
exp.use(cors({
    //credentials: true,                //如果需要跨域那么需要设置这两个属性,表示服务器端接受这个域来的信息
    //origin: 'http://localhost:8080'
})) // http zone
exp.use(cookieparser())

在进行这些初始化之后就可以进行调用函数进行设置/清除cookies

res.cookie(name, value [, options]);  //设置cookies, options可以设置很多参数。
res.clearCookie(name [, options]);   //清除cookies,

当然服务端读取cookie的时候,直接利用req.cookies或者req.signedCookies来读取参数信息

客户端设置:

在客户端如果UI服务器与业务服务器不是一个服务器(跨域操作),那么我们axios的参数里面要加上withCredentials,

var instance = axios.create({
        baseURL: 'http://localhost:8082',  //业务服务器
        withCredentials: true    //跨域,设置之后就会在发送请求的时候自动将cookie信息加到header里面
    })

如上客户端和服务器端设置后,就可以通过服务器读取和设置cookie了。

### 设置 Cookie 用于维持用户会话 在 Node.js 应用程序中,可以利用 `tough-cookie` 和其他中间件如 Express 的 `cookie-parser` 来管理和设置 cookies。为了创建并维护用户的会话状态,通常会在客户端浏览器上设定一个带有唯一标识符(通常是 session ID)的 cookie。 当用户首次访问网站时,服务器端生成一个新的会话对象,并将其关联到该用户的 session ID 上;随后这个 ID 被保存在一个安全的 HTTP-only cookie 中返回给客户端[^1]。每当后续请求到来时,如果包含了此特定的 cookie,则表明这是同一个用户的连续操作流的一部分[^4]。 下面是一个简单的例子展示怎样使用 Express 及其配套工具包来完成这一过程: ```javascript const express = require('express'); const app = express(); // 使用 cookie 解析器中间件解析来自客户端的 cookies 请求头字段. app.use(require('cookie-parser')()); // 假设这里有一个函数用来模拟获取或创建新的会话数据. function getSessionData(sessionId) { // 实际应用中应从数据库或其他持久化层读取会话信息. } // 当接收到 '/login' POST 请求时... app.post('/login', (req, res) => { let sessionId = generateUniqueSessionID(); // 自定义方法生成唯一的 Session ID // 将新建立好的会话存入内存/缓存/数据库等地方... // 向响应附加 Set-Cookie 头部项以告知浏览器记住我们的特殊令牌. res.cookie('sessionId', sessionId, { httpOnly: true }); res.redirect('/'); }); // 对于任何受保护路径下的 GET 请求... app.get('*', checkUserAuthenticityMiddleware); function checkUserAuthenticityMiddleware(req, res, next){ const sessionIdFromClient = req.cookies.sessionId; if (!sessionIdFromClient || !isValidSession(sessionIdFromClient)) { return res.status(401).send("Unauthorized"); } next(); } ``` 在这个案例里,`generateUniqueSessionID()` 是假设存在的功能,负责生产独一无二的字符串作为每次登录成功的凭证。而 `checkUserAuthenticityMiddleware` 则是用来检验传来的 session id 是否有效的方法,在实际部署环境中应当连接至某种形式的数据存储服务来进行验证工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值