IIS 7.0はセッション変数を保持しません

IIS 7.0はセッション変数を保持しません

ASP.NET ページを次のようにホストする場合:

<%@ Page Language="C#" %>

<!DOCTYPE html>    
<script runat="server">

    protected void btn_Click(object sender, EventArgs e)
    {
        lbl.Text = HttpContext.Current.Session["a"] == null ? 
                       "null" : 
                       HttpContext.Current.Session["a"].ToString();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            HttpContext.Current.Session["a"] = "A";
            lbl.Text = "assigned Session Variable";
        }
    }
</script>

<html>
<head>
    <title>Testing Sessions</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btn" runat="server" Text="reload" OnClick="btn_Click" />
        <hr />
        <asp:Label ID="lbl" runat="server" />
    </div>
    </form>
</body>
</html>

最初の実行ではテキストは取得できますassigned Session Variableが、クリックするとセッションオブジェクトは常にnull

通常のセッション変数を使用するためにオン/オフに切り替える必要があるオプションはありますか?

IIS 6.0 および Cassini (VS 2008 および 2010) では正常に動作します。

何が起こっているのか分からなくなってきました :o(

どのような助けでも大歓迎です!


上記の例ページのプロセス

代替テキスト

代替テキスト


さらなるテストこれはIE(この場合はIE8)でのみ発生し、Firefox、Safari、Opera、Chromeではいずれも正しい「答え」が返されることを示しています。

代替テキスト


チェックしてください状況のスクリーンキャスト

答え1

エクスプローラーではアンダースコアが機能せず、セッションが null になるため、par200864 の URL par_2008_64 を変更する必要があります。

答え2

従来のセッション状態では、問題のサイトで Cookie を有効にする必要があります。Internet Explorer ではサーバーからの Cookie をブロックするように設定されていて、他のブラウザーではそのように設定されていない可能性はありますか? 動作の違いはこれで説明できます。Fiddler を使用できるはずです (cf.http://www.fiddler2.com/fiddler2/) を使用して、IE とサーバー間の HTTP トラフィックを監視し、IE が Cookie をサーバーに送り返しているかどうかを確認します。答えは「いいえ」であると強く疑っています。

クッキーレスセッションを設定することもできます(例:http://msdn.microsoft.com/en-us/library/ms972429.aspx) を web.config ファイルに追加して、これも確認します。Cookie なしで機能する場合は、これで完了です。

答え3

誰かがこの「バグ」を見つけたら、簡単な操作で解決してください。

  • 仮想アプリケーションを削除する
  • 新しい仮想アプリケーションを作成します(以前と同じ名前でもかまいません)

答え4

顧客でも同じ問題が発生しました。この場合、アプリケーションを削除して追加しても問題は解決しません。コツは、URL 内のアンダースコアを置き換えるか削除することです。

関連情報