14

Cookie を設定する次のコードがあります。

  string locale = ((DropDownList)this.LoginUser.FindControl("locale")).SelectedValue;
  HttpCookie cookie = new HttpCookie("localization",locale);
  cookie.Expires= DateTime.Now.AddYears(1);
  Response.Cookies.Set(cookie);

ただし、Cookie を読み取ろうとすると、値が Null になります。クッキーが存在します。チェックした場合、次を通過することはありません。

         if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))

ヘルプ?

4

9 に答える 9

47

チェックはポストバック後に行われますか?その場合は、代わりに Request コレクションから Cookie を読み取る必要があります。

Cookie は、Response.Cookies に追加することでブラウザーに保持され、Request.Cookies から読み戻されます。

Response に追加された Cookie は、ページが同じリクエストにある場合にのみ読み取ることができます。

于 2008-10-16T09:17:35.313 に答える
19

最も可能性の高い答えはこの投稿に見られます

ReqestではなくResponseオブジェクトを使用してCookieの存在を確認しようとすると、ASP.netは自動的にCookieを作成します。

編集:メモとして、私はASP.NETがCookieAPIのために悪夢を作るCookieの存在をチェックする必要があるソフトウェアを書くことになりました。リクエストからCookieを取得し、状態オブジェクトを作成する変換プロセスを作成することになりました。リクエストの最後に、状態オブジェクトをCookieに変換し直して、応答に詰め込みます(必要な場合)。これにより、Cookieが応答に含まれているかどうかを把握し、代わりにCookieを更新して、無意味なCookieの作成などを回避しようとすることが軽減されました。

于 2010-10-11T22:03:32.023 に答える
1

同様の問題が発生しました。ポストバックでCookieを読み取ることができませんでした。私にとっての問題は、CookieのSecureプロパティをtrueにチェックしたことでした。CookieのSecureプロパティをオンにすると、接続でSecureSocketsLayerが使用されている場合にのみCookieが送信されると言われています。ただし、SSLを介して送信していなかったことを考えると、ブラウザで初めてCookieを確認できたのに、ポストバックでは確認できなかったのかどうかはわかりません。とにかく、cookie.Secureをfalseに変更し、問題を解決し、ポストバックでcookieを読み取らせました。

申し訳ありませんが、これがあなたの問題と何の関係もない場合、私はこれを解決する方法を探すのに時間を費やしたので、これを共有したいと思いました。

于 2010-10-07T11:23:29.970 に答える
1

私は答えを知っていると思います。

<form>タグの action 属性を削除するだけです。

次のようにします。<form id="form1" runat="server">

これの代わりに:<form id="form1" action="DisplayName.aspx" runat="server">

次に、コードで使用する必要がありResponse.Redirect("DisplayName.aspx");ます。

于 2011-09-27T17:16:17.860 に答える
1

「応答」収集ではなく「要求」収集にうんざりしていませんか?

if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))
于 2008-10-16T09:26:46.417 に答える
0

デバッグ モードでコンパイルしている場合は、問題のページのトレースをオンにして、Cookie が要求コレクションにあることを確認してください。aspx ファイルの @page ディレクティブに trace を設定します。

于 2008-10-16T14:29:17.133 に答える
0

これをChris Marisicの回答にコメントとして追加しますが、私にはその特権がありません:-(

リクエストから Cookie を削除することについて Chris が編集で言ったことに加えて、ポストバックで新しく作成された Cookie の値を読み取ることができるようにするために、私は最終的にやりました

Private Sub SetPageSize(ByVal pageSize As Integer)

    ' Set cookie value to pageSize
    Dim pageSizeCookie As HttpCookie = New HttpCookie(pageSizeCookieName)
    With pageSizeCookie
        .Expires = Now.AddYears(100)
        .Value = pageSize.ToString
    End With

    ' Add to response to save it
    Me.Response.Cookies.Add(pageSizeCookie)

    ' Add to request so available for postback
    Me.Request.Cookies.Remove(pageSizeCookieName)
    Me.Request.Cookies.Add(pageSizeCookie)

End Sub

Request.Cookies.Remove および Request.Cookies.Add 行がポストバックで機能するようにする

于 2013-03-20T21:24:32.787 に答える
0

このスニペットを試してください -

string locale = ((DropDownList)this.LoginUser.FindControl("locale"))
                                                    .SelectedValue;  
HttpCookie myCookie = new HttpCookie("localization");
Response.Cookies.Add(myCookie);
myCookie.Values.Add("locale", locale);
Response.Cookies["localization"].Expires = DateTime.Now.AddYears(1);

&それを読むために -

if (Request.Cookies["localization"] != null)
{
   HttpCookie cookie = Request.Cookies["localization"];
   string locale = cookie.Values["locale"].ToString();
}
于 2008-10-16T11:25:03.997 に答える
-1

Response.Cookies.Add(cookie); を使用します。Response.Cookies.Set(cookie); の代わりに

于 2008-10-16T09:54:54.770 に答える