12

ASP.NETのCookieを新しいURLに渡す際に問題が発生しました。私は次のように応答にCookieを追加します。

Response.Cookies.Add(new HttpCookie("Username", Username.Text));

次に、リダイレクトを発行します。

Response.Redirect(returnURL);

リダイレクト先の新しいページでは、Cookieコレクションが空です。私は次のようにCookieを取得しようとします:

Request.Cookies["Username"].Value;

クッキーが渡されない理由を誰かが考えることができますか?

編集:

追加するのを忘れた詳細情報-同じブラウザセッション内での2回目の試行で、Cookieはリダイレクトで正しく渡されます。

編集#2:リダイレクトURLで実際のドメイン名の代わりに「localhost」を使用すると、最初のログイン時にCookieが正しく渡されることがわかりました。したがって、リダイレクトURLが実際のドメイン名である場合にのみ機能しません。変。

4

6 に答える 6

5

ブラウザは、Cookieを設定したページと同じドメイン内のページにのみCookieを送り返します。

したがって、ページに移動しhttp://localhost/login.aspxてサーバーがCookieの設定に進み、(たとえば)にリダイレクトするとhttp://mymachinename/default.aspx、2番目のURLを要求するときに、同じドメインにないため、Cookieはブラウザからサーバーに送信されません。

Cookieを取り戻すには、リダイレクトするhttp://localhost/default.aspxか、最初にに移動することから始める必要がありますhttp://mymachinename/login.aspx

于 2012-08-14T14:08:50.300 に答える
5

HTTP状態管理メカニズムによると

オリジンサーバーは、任意の応答とともにSet-Cookie応答ヘッダーを送信できます(MAY)

ユーザーエージェントは、100レベルのステータスコードを持つ応答に含まれるSet-Cookieヘッダーを無視できますが、他の応答(400 レベルおよび500レベルのステータスコード
を持つ応答を含む)に含まれるSet-Cookieヘッダーを処理する必要があります。
オリジンサーバーは
、単一の応答に複数のSet-Cookieヘッダーフィールドを含めることができます。
CookieまたはSet-Cookieヘッダーフィールドが存在しても、HTTPキャッシュ
が応答を保存および再利用することを妨げることはありません。

したがって、REDIRECT(3xx)は「その他」の応答に含まれるため、ブラウザーで処理する必要があります。ブラウザーは、さまざまな理由でそれらをドロップする可能性があります。ブラウザがCookieを拒否するそのような原因の1つは、Cookieのドメイン属性が指定されていて十分なドットがない場合(「localhost」など)、またはCookieのパス属性がURLの実際のパスと大文字と小文字を区別しない場合です。 (Cookieのパスでは大文字と小文字が区別されます)。

于 2013-11-15T01:29:35.450 に答える
4

.NET Core2.1WebAppでも同じ問題に直面しています。しばらく検索したところ、次の方法を使用して、リダイレクト応答時にCookieが失われないようにすることができることがわかりました。

HttpContext.Response.Cookies.Append("cookie-name", "cookie-value", new CookieOptions { IsEssential = true });

ドキュメントには、このプロパティは「このCookieがアプリケーションが正しく機能するために不可欠であるかどうかを示します。trueの場合、同意ポリシーのチェックがバイパスされる可能性があります。デフォルト値はfalseです。」

これはあなたのためのオプションかもしれません!

于 2019-01-11T15:55:47.900 に答える
2
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        if (Request.QueryString["AcceptsCookies"] == null)
        {
            Response.Cookies["TestCookie"].Value = "ok";
            Response.Cookies["TestCookie"].Expires =
                DateTime.Now.AddMinutes(1);
            Response.Redirect("TestForCookies.aspx?redirect=" +
                Server.UrlEncode(Request.Url.ToString()));
        }
        else
        {
            Label1.Text = "Accept cookies = " +
                Server.UrlEncode(
                Request.QueryString["AcceptsCookies"]);
        }
    }
}

このリンクは、C#でのCookieの読み取りと書き込みを理解するのに役立ちます。

また、このページは、C#よりもVBに精通している場合に役立ちます。

于 2012-08-09T14:21:12.170 に答える
0

通常、私はサーバーに、ajaxを介して取得するBase64文字列を生成させます。準備完了オブジェクトが利用可能になったら、クライアントのbase64文字列から「添付ファイル」を作成します。そうすれば、ダウンロードが完了したときにブラウザ間で一貫して応答できます。

于 2018-02-07T17:16:36.777 に答える
0

私と一緒に働いた解決策は、絶対URLではなく相対URLを使用してリダイレクトすることです:

次のように:

Response.redirect("~/yourRedirectPage.aspx");

それ以外の

responce.redirect("www.yoursite.com/yourRedirectPage.aspx");
于 2021-01-31T07:50:47.320 に答える