В моем приложении узла я пытаюсь изменить значение файла cookie с помощью приведенного ниже кода. Но когда я устанавливаю некоторые значения файлов cookie, я вижу, что они изменены в моем заголовке ответа браузера. Код узла:

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

Но заголовок, который я получаю,

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

По сути s%3A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%2FFT3TM64riv3QAs изменен на s%253A9Q8kumq4BgrHtJPM90ebhhl6OqChsxdp.x0uf93Hk5I03KWeF%252FFT3TM64riv3QAs. т.е. «25» добавляется.

Я думаю, это происходит потому, что он кодирует URL-адрес. Я не хочу, чтобы это происходило, поскольку он меняет отправляемое мной значение, и у меня нет контроля над его анализом до того, как браузер установит его в cookie.

1
AnandShiva 1 Авг 2020 в 16:14

1 ответ

Лучший ответ

Вы должны установить функцию encode:

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

Функция по умолчанию encode - encodeURLComponent.

3
MHZT 1 Авг 2020 в 17:47
Можете ли вы предоставить какую-либо документацию для этого решения? Итак, в моем случае, если просто оставить функцию кодирования пустой, не будет ли она вообще кодировать с помощью encodeURLComponent?
 – 
AnandShiva
2 Авг 2020 в 10:34
Как я уже упоминал, значением по умолчанию для функции encode является функция encodeURLComponent. когда мы устанавливаем encode: v => v, мы говорим просто вернуть ввод и не изменять его. Вы можете прочитать больше здесь.
 – 
MHZT
2 Авг 2020 в 12:50