2012-08-09 28 views
6

ASP.NETのCookieを新しいURLに渡すときに問題が発生しました。私はそうのようなレスポンスにクッキーを追加します。ASP.NETのResponse.RedirectでCookieを渡す

Response.Cookies.Add(new HttpCookie("Username", Username.Text)); 

が、私はその後、リダイレクトを発行します。

私はにリダイレクトしています新しいページで

Response.Redirect(returnURL);

、クッキーのコレクションが空です。

Request.Cookies["Username"].Value;

は誰でもクッキーが渡されていない理由を考えることができます:私はそうのようなクッキーを取得しようか?

編集:私は追加するのを忘れ

さらに詳細 - 同じブラウザセッション内の第二の試みで、クッキーをリダイレクトして正しく渡されます。

EDIT#2:リダイレクトURLに実際のドメイン名の代わりに "localhost"を使用すると、最初のログイン時にCookieが正しく渡されることがわかりました。そのため、リダイレクトURLは実際のドメイン名であり、動作しません。奇妙な。

+2

これはこの質問に似ています。http://stackoverflow.com/q/5366635/52136 –

+0

ありがとうございますが、これはIE9、FF、Chrome、Safariで発生します。 また、最初に追加することを忘れた情報を追加しました。 – tuseau

+0

[302リダイレクト時にブラウザのCookieを送信する](https://stackoverflow.com/questions/4694089/sending-browser-cookies-during-a-302-redirect)の重複している可能性があります。 –

答えて

2
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     if (Request.QueryString["AcceptsCookies"] == null) 
     { 
      Response.Cookies["TestCookie"].Value = "ok"; 
      Response.Cookies["TestCookie"].Expires = 
       DateTime.Now.AddMinutes(1); 
      Response.Redirect("TestForCookies.aspx?redirect=" + 
       Server.UrlEncode(Request.Url.ToString())); 
     } 
     else 
     { 
      Label1.Text = "Accept cookies = " + 
       Server.UrlEncode(
       Request.QueryString["AcceptsCookies"]); 
     } 
    } 
} 

This linkは、C#でのクッキーの読み書きを理解するのに役立ちます。

また、this pageは、VBにC#以上のことがある場合に役立ちます。

3

ブラウザは、Cookieを設定したページと同じドメインのページにのみクッキーを戻します。

​​に行き、サーバーが次にクッキーを設定して(例えば)http://mymachinename/default.aspxにリダイレクトすると、2番目のURLを要求するときにブラウザからサーバーにクッキーが送信されません同じドメイン。

クッキーを元に戻すには、http://localhost/default.aspxにリダイレクトするか、最初にhttp://mymachinename/login.aspxに移動する必要があります。

3

任意の
応答でのSet-Cookieレスポンスヘッダを送信することがHTTP State Management Mechanism

オリジンサーバによります。ユーザエージェントは、100レベルのステータスコードと
応答に含まれるのSet-Cookieヘッダを無視するかもしれないが(400-
500レベルステータスコードを有する応答を含む)他の応答に含まれるのSet-Cookie
ヘッダを処理しなければなりません。オリジンサーバーは、単一の応答内に複数のSet-Cookieヘッダーフィールドを含めることができます(
)。
CookieまたはSet-Cookieヘッダーフィールドの存在は、HTTPキャッシュ
のレスポンスの保存と再利用を排除しません。

したがって、リダイレクト(3xx)は「その他の」応答に含まれているため、ブラウザで処理する必要があります。そのため、さまざまな理由でドロップされる可能性があります。クッキーを拒否するブラウザの1つの原因は、クッキーのドメイン属性が指定されていて、ドット(「localhost」など)が不足しているか、またはクッキーのパス属性がURLの実際のパスで大文字と小文字を一致させない(クッキーのパスは大文字と小文字が区別されます)。

0

通常、私のサーバーは、ajax経由で取得するBase64文字列を生成します。準備ができているオブジェクトが利用可能になると、私はクライアント上のベース64文字列から '添付ファイル'を作成します。そうすれば、ブラウザ間で一貫してダウンロードが完了するように対応することができます。

関連する問題