5

私はこれに何時間も費やしてきましたが、それは非常識です。

「setcookie」関数を含むページ基本クラスがあり、これは基本的に次のとおりです。

        Dim context As HttpContext = System.Web.HttpContext.Current

        If context.Request.Cookies(cookieName) Is Nothing Then
            Dim cookie As HttpCookie
            cookie.Value = cookieValue
            cookie.Expires = DateTime.Now.AddDays(7)
            context.Response.Cookies.Add(cookie)
        Else
            Dim cookie As HttpCookie = context.Request.Cookies(cookieName)
            cookie.Expires = DateTime.Now.AddDays(7)
            cookie.Value = cookieValue
        End If

この関数は、単純なaspxページによって呼び出されます。これはテスト環境にあるため、使用しているCookieには以前の値「123」があります。デバッグおよび監視ウィンドウを使用すると、値が「168」に正常に変更されます。

次の行にデバッグブレークポイントがあります。

           Response.Redirect("overview.aspx", False)

ブレークポイントがアクティブな場合、ウォッチウィンドウの値は次のとおりです。

    currProjectID   168 Integer
    HttpContext.Current.Request.Cookies("currProjectID").Value  "168"   String

(currProjectIDは、上記の関数を使用してCookieを取得/設定するベースページクラスのプロパティです)

次に、「F10」を使用して上記のブレークポイント行からステップオフし、変数の値を変更します。

    HttpContext.Current.Request.Cookies("currProjectID").Value  "123"   String
    currProjectID   123 Integer

これは正気じゃない!コードはどこにも行きません。デバッグポイントは上の「response.redirect」行のすぐ下にありますが、値はすぐに以前の値に変更されています。「setcookie」ルーチンの近くには何もありません。誰かが私の狂気を救って、何が悪いのか教えてください!?

4

1 に答える 1

3

- リクエストから Cookie を取得する - Cookie を更新する - 応答として Cookie を送信する

応答で Cookie を送信しないと、ブラウザは変更について何も知りません!!! Cookie は、自分自身を更新するほど賢くありません。

それが役に立てば幸い。

アップデート

var cookieDetails = Request.Cookies["yourCookie"];
if (cookieDetails != null)
{
    cookieDetails.Values["someValue"] = valueToAssign;
}
else
{
    cookieDetails = new HttpCookie("yourCookie");
    cookieDetails.Values.Add("someValue", valueToAssign);
}
Response.Cookies.Add(cookieDetails);

この例では、Cookie を設定します。ご覧のとおり、最初のビットは Cookie が存在するかどうかを確認し、2 番目のビットは新しい Cookie を作成するだけです。

Cookie をブラウザに送り返す最後のビットがありません

Response.Cookies.Add(cookieDetails);

それが役に立てば幸い。

于 2012-03-14T19:05:28.990 に答える