Nodejs 脚本遇到重定向时,怎么携带 httponly 的 cookie?

写一个馒头的定时登录脚本,在青龙中运行,nodeCommonJS模式(非ES模式)

POST 登录成功后,会在响应头中指定location重定向到首页,此时需要携带httponlycookie访问首页

试了用node 18 自带的fetch和第三方的node-fetchaxios,设置了credentialstrueinclude,但重定向还是不发送cookie。导致重定向到首页后,因为没有携带登录cookie又被重定向到登录页面

特别是axios,怎么重定向时携带之前响应头中set-cookie的 cookie (已设置withCredentials: true


Nodejs 脚本遇到重定向时,怎么携带 httponly 的 cookie?

5 回复

在浏览器中是浏览器帮你带了 cookie ,node 这种就相当于一个新的 post 了,所以在你登陆的时候你可以拿到 response 的 cookie ,然后保存下来,下次请求的时候自己带上
话说这种东西为什么要自己写,nas-tool 或者 moviepilot 不好用吗


是同一次执行中,不是两次执行,应该会自动携带响应的 set-cookie 吧,不过我看 gpt 说,只有在自动重定向时不会携带,此时需要手动调用 axios.get()一次


谢谢。gpt 又说错了,还是照 提取响应头的 cookie 后携带的

在 Node.js 中处理 HTTP 重定向时,若需要携带 HttpOnly 的 cookie,通常这些 cookie 会由浏览器自动管理。然而,在服务器端脚本(如 Node.js)进行重定向时,直接操作 HttpOnly cookie 是不可能的,因为这些 cookie 不能被脚本访问,以增强安全性。

不过,你可以通过以下方式间接处理重定向,并确保 HttpOnly cookie 被正确携带:

  1. 服务器端重定向:让服务器处理重定向,并确保在响应头中正确设置 Set-Cookie。浏览器会自动携带这些 HttpOnly cookie 进行后续请求。

  2. 使用重定向状态码:使用 HTTP 状态码如 302(Found)或 307(Temporary Redirect)来指示客户端重定向。

示例代码(使用 Express.js):

const express = require('express');
const app = express();

app.get('/redirect', (req, res) => {
    // 设置 HttpOnly cookie
    res.cookie('myCookie', 'cookieValue', { httpOnly: true });
    
    // 重定向
    res.redirect(302, '/target');
});

app.get('/target', (req, res) => {
    res.send('Target page reached');
});

app.listen(3000, () => {
    console.log('Server running on port 3000');
});

在这个例子中,当访问 /redirect 时,服务器设置一个 HttpOnly cookie,并重定向到 /target。浏览器会自动携带这个 HttpOnly cookie 到新的位置。

注意,直接在 Node.js 脚本中管理和携带 HttpOnly cookie 是不可能的,这也是出于安全考虑。

回到顶部