
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 内のアンダースコアを置き換えるか削除することです。