2

私は、従来の ASP と .NET が混在する Web サイトをサポートしている唯一の開発者です。従来の ASP アプリケーションに .net ページを追加する必要がありました。このアプリケーションでは、ユーザーがログインする必要があります。従来の ASP で記述されたログイン ページは、.net ページがログイン ユーザーを識別するために使用する Cookie を作成し、他の従来の ASP ページが使用するためにセッション変数に情報を保存します。従来の ASP では、Cookie コードは次のとおりです。

response.cookies("foo")("value1") = value1
response.cookies("foo")("value2") = value2
response.cookies("foo").Expires = DateAdd("N", 15, Now())
response.cookies("foo").Path = "/"

Page_Load コードの .NET 分離コードでは、次のコードを使用して Cookie をチェックします。

if(!IsPostBack) {
if(Request.Cookies["foo"] != null) { ... } else { //Cookie 作成ページ cookiefoo.asp にリダイレクト } }

ほとんどの場合、これは問題なく動作します。ただし、Page_Load コードが Cookie を見つけられないため、Cookie 作成ページにリダイレクトされるユーザーがいます。ユーザーが何度 Cookie 作成ページにリダイレクトされても、参照ページは Cookie foo を見つけることができます。問題は IE7 で発生しており、ブラウザーでプライバシーと Cookie の設定を変更しようとしましたが、ユーザーが抱えている問題を再現できないようです。

これが IE7 で発生する理由を知っている人はいますか?

ありがとう。

4

7 に答える 7

2

Fiddlerを使用することは、何が起こっているのかを把握するための良い方法です。ブラウザが取得している正確な Set-Cookie を確認できます。

于 2008-09-23T16:49:35.517 に答える
1

デバッグが非常に難しいCookieについての1つのことは、ドメインに関してはCookieで大文字と小文字が区別されることです。そのため、ユーザーが「www.abc.com/dir1/Alpha/」と入力した場合、「www.abc.com/dir1/alpha/」に対して発行されたCookieにコードからアクセスすることはできません。

ASP.NETページで注意すべきもう1つのことは

Page.Response.Redirect("~/alpha");

ASP.NETは、実際のファイルパスの大文字と小文字に基づいて相対URLの大文字と小文字を変更します。ディレクトリ構造に大文字と小文字が混在している場合は、

Page.Response.Redirect(Page.ResolveUrl("~/alpha").ToLower());
于 2010-05-25T17:31:20.770 に答える
0

IE7のプライバシー設定がファーストパーティのCookieをブロックするように設定されている場合、投稿したコードは壊れているはずです。実験でそれを試しましたか?

FiddlerをLouとして使用することは良い考えですが、Set-Cookie応答ヘッダーは後続のCookie要求ヘッダーよりも面白くなく、クライアントがそれらをサーバーに転送しているかどうかを確認します。

于 2008-09-24T20:42:56.713 に答える
0

クロスプラットフォーム Cookie テストの一般的なルール: すべての Cookie を画面にダンプして、データを確認できるようにします。なぜそれが起こっているのか正確には説明できないかもしれませんが、何が起こっているのかを教えてくれるはずです。

于 2008-09-23T16:50:15.267 に答える
0

これは、私が作成した同様のアプリケーションで発生したことを思い出します。一部のページは従来の ASP でしたが、他のページは ASP.NET でした。Cookie は、.NET ページと従来の ASP ページの間で消えているように見えました。

IIRC、Cookie を Server.HTMLEncode/HTMLDecode するために必要な .NET 側。申し訳ありませんが、使用した正確なコードはありませんが、これで正しい方向に進むはずです。

于 2008-09-27T05:43:11.393 に答える
0

わかりました 2 番目の回答: ユーザーのサブセットが非常に小さい場合は、ユーザーが自分のコンピューターにインストールしたソフトウェアを確認する必要があるかもしれません。すべてのマシンに、Cookie をいじっている一般的なアンチスパイウェア/アドウェア アプリケーションが存在する可能性があります。

これらのユーザーから回答が得られない場合、または疑いがない場合は、特別な小さなテスト スクリプトを作成して Cookie を作成し、次のページ読み込み時に結果を送信する価値があるかもしれません。

できるだけシンプルに保ちたい (リンクをロードした後にユーザーの操作を行わない) ため、次のようにします。

  1. 従来の ASP で Cookie を設定する
  2. 別の ASP ページにリダイレクトします。
  3. Cookie を読み取り、メールで送信します。
  4. ASPNET ページにリダイレクトします。
  5. Cookie を読み取り、メールで送信します。

ASPNET にも Cookie を設定し、それを読み取ってみるとよいでしょう。

于 2008-09-23T17:00:43.633 に答える