防止响应设置 cookie 中的 url 编码 - nodejs

Ana*_*iva 1 javascript cookies urlencode node.js

在我的节点应用程序中,我尝试使用以下代码更改我的 cookie 值。但是当我设置一些 cookie 值时,我看到它在浏览器的响应标头中被修改。节点代码:

let nonEncodedString ='s%3A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%2FFT3TM64riv3QAs'
res.cookie('connect.sid', nonEncodedString , { maxAge, httpOnly: true, overwrite: true });

Run Code Online (Sandbox Code Playgroud)

但我得到的标题是

set-cookie: connect.sid=s%253A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%252FFT3TM64riv3QAs; Max-Age=157680000; Path=/; Expires=Thu, 31 Jul 2025 11:28:35 GMT; HttpOnly

Run Code Online (Sandbox Code Playgroud)

本质 s%3A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%2FFT3TM64riv3QAs 上改为 s%253A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%252FFT3TM64riv3QAs. IE。正在添加“25”。

我认为这是因为它正在进行 URL 编码。我不希望这种情况发生,因为它改变了我发送的值,并且在浏览器将其设置在 cookie 中之前我无法控制解析它。

小智 5

你应该设置一个encode函数:

  res.cookie('connect.sid', nonEncodedString,
    { maxAge,
      httpOnly: true,
      overwrite: true,
      encode: v => v
    })

Run Code Online (Sandbox Code Playgroud)

默认encode函数是encodeURLComponent.