
Если я размещаю страницу 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
Вам необходимо изменить URL par_2008_64 на par200864, поскольку в проводнике подчеркивание не работает и сеанс становится нулевым.
решение2
Традиционное состояние сеанса требует включения куки для рассматриваемого сайта. Возможно ли, что ваш Internet Explorer настроен на блокировку куки, поступающих с сервера, а другие браузеры не настроены таким образом? Это объяснило бы разницу в поведении. Вы должны иметь возможность использовать Fiddler (см.http://www.fiddler2.com/fiddler2/) для просмотра HTTP-трафика между IE и сервером и проверки того, отправляет ли IE куки обратно на сервер. Я сильно подозреваю, что ответ «нет».
Потенциально вы можете установить сеансы без cookie-файлов (например,http://msdn.microsoft.com/en-us/library/ms972429.aspx) в вашем файле web.config, чтобы это подтвердить; если cookieless работает, то все в порядке.
решение3
Если кто-то обнаружит этот «баг», сделайте простую вещь, чтобы его устранить.
- удалить виртуальное приложение
- создать новое виртуальное приложение (может иметь то же имя, что и предыдущее)
решение4
Была та же проблема у клиента. Удаление и добавление приложения не решит проблему в этом случае. Хитрость в следующем: замените или удалите подчеркивание в URL!