4

ブラウザからサーバー内のURLにPOSTリクエストが送信された後/generate、文字列を作成してCookieとして保存したいと考えています。GET リクエストが後でブラウザから/retrieveサーバーの URL に送信されたときに、その文字列をクライアントへの応答として送信したいと考えています。

これが私が試したものです:

ルート.js

const Router = require('koa-router')
const router = new Router()

router.post('/generate', function * () {
  this.cookies.set('generatedString', 'example')
  this.response.body = 'String saved as cookie!'
})

router.get('/retrieve', function * () {
  const cookie = this.cookies.get('generatedString')
  console.log(cookie) // undefined!
  this.response.body = cookie
})

POST 要求ハンドラーが既に実行されていて、その Cookieが必要な場合でも、なぜthis.cookies.get('generatedString')戻るのですか? どんな助けでも大歓迎です!undefinedset


編集:fetch重要な場合は、 API を使用して POST および GET 要求を作成していることに言及する価値があると思いました。

4

1 に答える 1

2

重要な場合は、fetch API を使用して POST および GET 要求を作成していることに言及する価値があると思いました。

fetchAPIには、「デフォルトでは、フェッチはサーバーに Cookie を送信しないため、サイトがユーザー セッションの維持に依存している場合、認証されていないリクエストが発生する」と記載されています。

fetchCookie を送信する場合は、送信するリクエストにオプションを追加してcredentials、値を に設定する必要がありますinclude

POST リクエストの例:

const request = {
  method: 'POST',
  credentials: 'include',
  headers: ...,
  body: ...
}

fetch('/generate', request).then(...)

GET リクエストの例:

fetch('/retrieve', { credentials: 'include' }).then(...)
于 2016-10-31T00:18:21.853 に答える