Назад | Перейти на главную страницу

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, все они дают правильный "ответ"


проверить снимок экрана ситуации

Вы должны изменить свой URL-адрес par_2008_64 в par200864, ​​потому что в проводнике подчеркивание не работает, и сеанс становится нулевым

Традиционное состояние сеанса требует, чтобы для рассматриваемого сайта были включены файлы cookie. Возможно ли, что у вас установлен Internet Explorer для блокировки файлов cookie, поступающих с сервера, а другие браузеры не настроены таким образом? Это объяснило бы разницу в поведении. Вы должны уметь использовать Fiddler (см. http://www.fiddler2.com/fiddler2/), чтобы наблюдать за HTTP-трафиком между IE и сервером и посмотреть, отправляет ли IE cookie обратно на сервер. Я очень подозреваю, что ответ - «нет».

Вы можете установить сеансы без файлов cookie (например, http://msdn.microsoft.com/en-us/library/ms972429.aspx) в вашем файле web.config, чтобы подтвердить это; если работает без файлов cookie, тогда вперед.

Если кто-нибудь обнаружит эту «ошибку», сделайте простую вещь, чтобы исправить ее.

  • удалить виртуальное приложение
  • создать новое виртуальное приложение (может иметь то же имя, что и раньше)

Была такая же проблема у клиента. Удаление и добавление приложения в этом случае не решит проблему. Уловка заключается в следующем: замените или удалите подчеркивание в URL-адресе!