3

ファイルをいじりながら、中global.asax.csにいくつかのコードを添付しました

protected void Session_Start(object sender, EventArgs e)
{

}

そして、Session_Startクロムを使用しているときにリクエストごとに呼び出されていることに気付き始めました。Firefox を使用する場合、これは当てはまらず、1 回だけ呼び出されました。何が原因でしょうか?

注意してください、これは私の開発マシン上でのみです。コードをコンパイルして実行し、Firefox を開き、参照するhttp://localhost:63893/Session_Start. Firefox でブラウジングしているときに、1 回しかヒットしませんSession_Start

chromeを開いてブラウズするhttp://localhost:63893/と、ヒットしSession_Startます。次に、ログイン データを入力してログインを押すと、別の時間にヒットし、次のページの取得要求をロードしているときに別のSession_Start時間にヒットします。カウンターを使って確認したところ、実際にその間に 3 つのユニークなセッションが作成されました。Session_Start

値が保存されていない場合、セッションが破棄されると述べているソースがいくつかあることを私は知っています。それは私にとっては素晴らしい説明ですが、そうではありません。私はこれを2つの方法で反証しました。

方法 1:

protected void Session_End(){} /*breakpoint*/

起動したことはありません。古いセッションがまだ存在していることを確認できます。

方法 2:

Session["KeepAlive"] = true;の内部で使用して、それが呼び出されSession_Startないようにするかどうかを確認しましたが、そうではありませんでした。まだ呼ばれていませんでした。_Start_End

2つの違いは何ですか、それとも私が間違ったことをしましたか?

4

1 に答える 1

6

コメントで助けてくれてありがとう。チャットとブログ投稿へのリンクを通じて実際にこれを解決しました: http://tobiefysh.blogspot.co.uk/2010/12/chrome-is-eating-my-session-varibles-or.html

と説明していthere was a 302 response when trying to get to favicon.icoます。基本的にchromeはfavicon.icoをリクエストしており、メソッドを叩いてRegisterRoutesセッションSession_Startを過剰に作成するメソッドにしています。

それがずっと続く理由Session_Startは、Google Chrome がファビコン リクエストで Cookie を送信しないためです。ですから、これは Cookie の問題だと思っていたすべての人にとって、あなたは正しかったのです。

すべての煩わしさに対する非常に簡単な修正、これを私のRegisterRoutesメソッドに追加しただけです

routes.IgnoreRoute("favicon.ico");

これで、Google はアイコンが必要になるたびにセッションを取得しなくなりました。

于 2013-04-16T23:45:36.890 に答える