質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

1回答

3584閲覧

VisualStudioのデバッグIISExpressでCOOKIEが保持出来ない

yex

総合スコア0

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/03/02 09:45

編集2021/03/03 01:55

概要

VisualStudio2019にて、ASP.NET Core 3.1 MVCのWebシステム開発を行っています。
C#のプログラムでCOOKIEに値を登録しているのですが、VisualStudio2019のデバッグ(IISExpress環境)を終わらせて再度デバッグ実行を行うと、COOKIEに登録した値が消えてしまいます。

デバッグ実行中なら、正常にCOOKIEに値を取得することが出来ます。
また、同一環境の別PCでは、デバッグ実行を終わらせて再度デバッグ実行を行ってもCOOKIEの値が保持出来ています。

VisualStudioやIISExpressなどの、何かしらの設定が影響しているとしか思えないのですが、原因が分からない状況です。
デバッグ実行の度にCOOKIE値がクリアされてしまってはテストの効率が非常に悪いので、解決策があれば教えていただきたいです。

ブラウザについて

デバッグ実行時に自動的にEdgeが起動しますが、クロームでアクセスを行っても結果は同じです。

COOKIEに保存する内容・タイミング・方法など

COOKIEに保存する内容はログイン情報のIDの文字列で例えば"XXX"です。下記のコードで設定と取得を行っています。
ログイン時にCOOKIEを設定し、デバッグ実行時最初にアクセスされるコントローラ内で設定したCOOKIEが存在すれば取得しています。

下記のコードで設定・取得を行っています。
コード内の_httpContextAccessorはコンストラクタでDIしたHttpContextにアクセスを行うクラスです。

C#

1/// <summary> 2/// COOKIEに文字列を設定 3/// </summary> 4public void CookieSetString(string key, string value) 5{ 6  if (value != null) 7 { 8 _httpContextAccessor.HttpContext.Response.Cookies.Append(key, value); 9 } 10} 11 12/// <summary> 13/// COOKIEから文字列を取得 14/// </summary> 15public string CookieGetString(string key, string defaultValue = null) 16{ 17 string ret = defaultValue; 18 string value = _httpContextAccessor.HttpContext.Request.Cookies[key]; 19 if (string.IsNullOrEmpty(value) == false) 20 { 21 ret = value; 22 } 23 return ret; 24}

アドバイスいただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2021/03/02 12:25

Cookieを保持しているのはサーバーではなくブラウザですが、その辺は大丈夫ですか?
退会済みユーザー

退会済みユーザー

2021/03/02 22:58

ASP.NET のタグをつけて下さい。IIS は関係ないのでタグは削除願います。 クッキーの内容と、どういうタイミングで、どのようにブラウザに送信しているかを書いてください。
yex

2021/03/03 01:47

修正しました。 COOKIEがブラウザに保持されていることは承知しています。 追記内容にも記載していますが、複数ブラウザで同じ結果であり、デバッグをやり直さなければ問題なくCOOKIEが保持されていたので、何かしら他の影響があるのではないかと危惧していました。 念のためブラウザの設定についても再度見直してみます。
ockeghem

2021/03/03 02:04

ブラウザの開発ツールを用いて、レスポンスヘッダ(Set-Cookieがあるはずのもの)と、その後のリクエストヘッダ(Cookieヘッダがあるはずのもの)を追記ください。
退会済みユーザー

退会済みユーザー

2021/03/03 10:40

質問者さん、無言になってしまったけど、回答したのでそれに対するフィードバックを書こう。役に立った、立たなかったぐらいは書けるのでは? 役に立たなかったのなら、どこが期待する回答と違ったのか書けばあなたの期待する回答が出てくるかも。
guest

回答1

0

COOKIEに保存する内容はログイン情報のIDの文字列で例えば"XXX"です。下記のコードで設定と取得を行っています。

クッキーに有効期限を設定してない(即ち、Set-Cookie: に expires=... が指定されてない)ようですね。

その場合、クッキーはブラウザのメモリにしか保持されません。従って、ブラウザを閉じればクッキーは消えます。逆に、ブラウザを閉じなければクッキーは消えません。要求のたびに送られ続けます。

それゆえ、

VisualStudio2019のデバッグ(IISExpress環境)を終わらせて再度デバッグ実行を行うと、COOKIEに登録した値が消えてしまいます。

ということになったのだと思います。それ以外に原因は思い当たりません。Set-Cookie がどうなっているか調べてみてください。

ちなみに、有効期限 expires=... が指定されている場合はブラウザはクッキーを HDD に保存します。なので、ブラウザを閉じたり PC をシャットダウンしたりしても、再度ブラウザを立ち上げてアクセスすれば、ブラウザはクッキーを HDD から取得してサーバーに送ります。(有効期限内であればの話です)

【追記】

何故 ASP.NET Core Identity を使わないで独自認証を実装しているのか分かりませんが、もし知らなかったということなら方針変更して ASP.NET Core Identity を使ってはいかがですか?

テンプレートで生成されるアプリの Login ページには下の画像のように Remember me? チェックボックスが配置されていて、それにチェックを入れてログインすれば認証クッキーに expires=... が設定されるようになっています。

イメージ説明

応答ヘッダに含まれる Set-Cookie は以下のようになり、別途設定できる認証チケットの有効期間で expires=... が追加されます。

Set-Cookie: .AspNetCore.Identity.Application=CfD...; expires=Wed, 03 Mar 2021 03:28:45 GMT; path=/; secure; samesite=lax; httponly

Remember me? チェックボックスにチェックを入れないでログインした場合は expires=... は設定されないので、ブラウザを閉じればクッキーは消えます。

どうしても独自実装という場合は、それにも同様な機能を実装してはいかがですか。

投稿2021/03/03 02:20

編集2021/03/03 03:42
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問