1

リクエスト Cookie とレスポンス Cookie の違いがよくわかりません。また、ポストバックするたびに、Cookie をリクエストからレスポンスに手動で書き直さないと、消えてしまうようです。これを解決するにはどうすればよいですか?

    public string getCookie(string name) {
        if (Request.Cookies["MyApp"] != null && Request.Cookies["MyApp"][name] != null) {
            return Request.Cookies["MyApp"][name];
        } else if (Response.Cookies["MyApp"] != null && Response.Cookies["MyApp"][name] != null) {
            return Response.Cookies["MyApp"][name];
        } else {
            return "";
        }
    }
    public void writeCookie(string name, string value) {
        Response.Cookies["MyApp"][name] = value;
        HttpCookie newCookie = new HttpCookie(name, value);
        newCookie.Expires = DateTime.Now.AddYears(1);
        Response.SetCookie(newCookie);
    }
4

3 に答える 3

0
Request.Cookies["MyApp"];

上記のコードは、「MyApp」という名前の Cookie を返します。

Request.Cookies["MyApp"][name]

「MyApp」という Cookie から値「name」を取得しています。ただし、setCookie コードでは、呼び出された Cookie を設定しており、name「MyApp」という Cookie を作成していません。

 HttpCookie newCookie = new HttpCookie(name, value);
 newCookie.Expires = DateTime.Now.AddYears(1);
 Response.SetCookie(newCookie);

したがって、["MyApp"]それを持っている場所から削除するか、setCookie で次のようにする必要があります。

public void writeCookie(string name, string value) {
        if(Response.Cookies["MyApp"] == null) {
            HttpCookie newCookie = new HttpCookie("MyApp");
            newCookie.Expires = DateTime.Now.AddYears(1);
            Response.SetCookie(newCookie);
        }
        if(Response.Cookies["MyApp"][name] == null)
            Response.Cookies["MyApp"].Values.Add(name, value);
        else
            Response.Cookies["MyApp"][name] = val;
       // or maybe simple                 Response.Cookies["MyApp"][name] = val; will work fine, not sure here
    }
于 2013-04-04T14:55:55.207 に答える
0

Requestは、ユーザーが Web サイトにアクセスしようとしたときに取得する「もの」であり、Responseはこのリクエストに応答する方法です。

つまり、公式の msdn ドキュメント、つまり次の部分を参照してください。

ASP.NET には、2 つの組み込みの Cookie コレクションが含まれています。HttpRequest の Cookies コレクションを通じてアクセスされるコレクションには、クライアントからサーバーに送信された Cookie が Cookie ヘッダーに含まれています。HttpResponse の Cookies コレクションを通じてアクセスされるコレクションには、サーバー上で作成され、Set-Cookie ヘッダーでクライアントに送信される新しい Cookie が含まれています。

http://msdn.microsoft.com/en-us/library/system.web.httprequest.cookies.aspx

いいえ、有効期限が切れていない限り、毎回新しい Cookie を作成する必要はありません。正しい Cookie コレクションを参照していることを確認してください。

于 2013-04-04T14:41:13.753 に答える
0

Cookie に割り当てられているドメインとパスを確認することをお勧めします。パスが具体的すぎるか、間違ったドメインが設定されているために、保存した Cookie が孤立している可能性があります。

ドメインは、「yourdomain.com」など、ブラウザが認識するサーバー名です。Cookie がこれとは異なるドメインで設定されている場合、ブラウザはそれを送り返しません。同様に、Cookie のパスは、「/forum/admin/index」など、要求されているリソースへのパスです。Cookie は、その場所とすべての子の場所に対して送信されますが、親の場所に対しては送信されません。「/forum」ディレクトリにあるページにアクセスしている場合、「/forum/admin/index」に設定された Cookie は送信されません。

于 2013-04-04T14:47:39.643 に答える