2

IE は正常に動作しますが、FireFox は動作しません。

default.aspx ページに Cookie を設定しています。

    HttpCookie hc = new HttpCookie("guid", guid.ToString());
    hc.Expires = DateTime.Parse("12/12/2010");
    Response.Cookies.Add(hc);

私のアップロード コントロール (私は SWFUpload を使用しています) は、upload.aspx に送信します。

upload.aspx で次のように呼び出します。

    if (Request.Cookies["guid"] != null)
    {
       // Do something.
    }

...私の Cookie には ASP.NET セッション変数しか含まれていません。何か案は?

4

4 に答える 4

3

Flex アプリケーションを使用して Firefox にファイルをアップロードしようとすると、同じ問題が発生しました。Flash も使用している場合は、私が行ったことをやりたいと思うかもしれません。HTML コントロールを使用している場合、これが適用される場合と適用されない場合があります。

Firefox の問題を回避するために私が行ったのは、サーバーで 1 回限りのトークンを発行し、アップロード時にそのトークンを投稿することです (たとえば、フォームの非表示フィールドである可能性があります)。アップロード時にトークンが認識されると、アップロードが処理され、トークンの有効期限が切れます。つまり、基本的には、Cookie を使用せずに行っていることです。

于 2010-02-11T22:26:35.050 に答える
1

これは私がCookie値を追加/取得するために使用したものです。IEとFFの両方で私のために働きます

addCookie:

HttpCookie c = new HttpCookie("myCookie");
c.Expires = new DateTime(2050, 1, 1);
c.Values.Add("key", "value");

getCookie:

string value = Request.Cookies["myCookie"]["key"];
于 2010-02-11T15:14:24.350 に答える
1

バックグラウンドで、同じ Cookie を 2 回設定している可能性があります。Firefox と IE では、どちらを維持するかが異なる可能性があります。ASP.NET は、多くの Web アプリケーションで "guid" Cookie を自動的に設定するのが好きです。その名前を選択することで、自動的なロジックと自分自身のロジックとの間に緊張が生まれます。何が起こっているかを確認する最善の方法は、ライブ HTTP ヘッダーアドオンを Firefox にロードすることです。これにより、エンドユーザーに送信されている Cookie コマンドを正確に確認できます。同様の問題を強制的に再現することもできます。

HttpCookie hc = new HttpCookie("testcookie", "xyz");
hc.Expires = DateTime.Parse("12/12/2010");
Response.Cookies.Add(hc);
hc = new HttpCookie("testcookie", "abc");
Response.Cookies.Add(hc);

Set-Cookieこれにより、次の 2 つの呼び出しを含む HTTP ヘッダーが生成されます。

Set-Cookie: testcookie=xyz; expires=Sun, 12-Dec-2010 07:00:00 GMT; path=/
Set-Cookie: testcookie=abc; expires=Sun, 12-Dec-2010 07:00:00 GMT; path=/

そこから、最初または最後が最終的な値であるかどうかを決定するのはブラウザー次第です。2 つのブラウザーが異なる方法で行うと、説明した状況になります。ライブ HTTP ヘッダー アドオンをインストールし、同様のものを探します。少なくとも、"guid" は、ASP.NET フォーム アプリで使用する Cookie 名であると考える必要があります。

複数の場所に同じ Cookie を設定する必要がある場合は、最初にそれを見つけてみてください (存在しない場合は新しいものを作成してください)。これにより、同じ名前の別の Cookie を作成するのではなく、既存の Cookie の値をオーバーライドすることが保証されます。

HttpCookie hc = Response.Cookies["testcookie"];
if (null == hc) {
    hc = new HttpCookie("testcookie");
    Response.Cookies.Add(hc);
}
hc.Value = "xyz";
于 2010-02-11T15:32:08.443 に答える
0

まず、 には型安全なコンストラクターDateTimeがありnew DateTime(2010, 12, 12)ます。

次に、Cookie に別の名前を使用しています: guidvs applicationGuid。両方ではなく、どちらかを使用してください。

于 2010-02-11T14:46:13.200 に答える