ホームページ >バックエンド開発 >Golang >ブラウザは Golang バックエンドによって送信された Cookie を保存しません

ブラウザは Golang バックエンドによって送信された Cookie を保存しません

PHPz
PHPz転載
2024-02-14 23:30:091137ブラウズ

ブラウザは Golang バックエンドによって送信された Cookie を保存しません

php editor Strawberry は、ブラウザによる Cookie の保存に関する問題を紹介します。 Golang バックエンドを使用して Cookie を送信すると、ブラウザーが Cookie を保存しないことがあります。これには、ブラウザのプライバシー設定やコードの問題など、さまざまな理由が考えられます。この記事では、この問題を詳しく調査し、Golang バックエンドによって送信された Cookie をブラウザーが正しく保存できるようにするための解決策をいくつか紹介します。はじめましょう!

質問の内容

この質問は何度も寄せられていると思いますが、ほとんどの回答を試してみましたが、まだ解決できません。

net/http パッケージと js フロントエンドを備えた golang API があります。機能があります

リーリー

この関数はユーザーがログインするときに呼び出され、他のすべてのエンドポイントに送信されるようにします。これは郵便配達員の期待と一致しています。しかし、ブラウザに関しては、Cookie を記憶させることも、他のエンドポイントに送信することもできないようです。

エンドポイントを使用したjsの例

リーリー

golang で samesite 属性を設定するか、js で credential: "include" およびその他の回答を使用しようとしましたが、成功しませんでした。

解決策

コメントでの議論のおかげで、この問題に関するいくつかのヒントを見つけました。

Cookie を保存する (API とフロントエンドは同じホスト上にあります)

私は document.cookie を使用して Cookie を保存します。 API fetch からの応答で res.cookie を呼び出すと値のみが返されるため、オプションを手動で設定しました。例は、document.cookie = `gocookie=${res.cookie};path=/;domain=localhost; です。

Cookieを送信

この質問は、以前の質問とコメントで再度回答されています。問題は、正しい credentials:'include' (複数形) の代わりに credential:'include' を使用したことでした。

cors と cookie

API とフロントエンドが同じホスト上にない場合は、API とフロントエンドの両方を変更する必要があります。

###フロントエンド###

Cookie を必要とするのはフロントエンドではなく API であるため、Cookie には API のドメインが必要です。したがって、セキュリティ上の理由から、別のドメイン (フロントエンド) のドメイン (API) に Cookie を設定することはできません。解決策は、応答ヘッダーで

set-cookie

ヘッダーを返す API エンドポイントにユーザーをリダイレクトすることです。このソリューションは、Cookie を追加のドメイン (API が送信したため、API のドメイン) に登録するようにブラウザーに指示します。 また、フロントエンドに

credentials:'include'

を含める必要があります。 api

いくつかのヘッダーを設定する必要があります。私が設定したのは

です リーリー

フロントエンドがユーザーをリダイレクトし、応答に Cookie を設定するエンドポイントを公開する必要があります。これを省略すると、API のドメインを手動で設定する代わりに、ブラウザーによってドメインが自動的に設定されます。

cors を処理し、js が cookie を正常に送信できるようにするには、cookie に

samesite=none

属性と secure 属性を設定し、https 経由で API を提供する必要があります (簡単にするために、私はングロク)。 ###このような### リーリー

localstorage

document.cookie

の使用の違いも読むことをお勧めします。これは私が抱えていた問題の 1 つでした。 ### お役に立てれば。

以上がブラウザは Golang バックエンドによって送信された Cookie を保存しませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。