Привязка к HttpContext.Current.Session со статической переменной не работает - PullRequest
0 голосов
/ 13 ноября 2009

Оригинальный вопрос

Привет всем,

Я немного запутался в том, как MVC отображает HTTP-запросы в состояние сеанса.

Мой HTTP-запрос выглядит так:

GET / HTTP/1.1
Host: test.net
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.32 Safari/532.0
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

Как сервер узнает, на какой пользовательский сеанс это сопоставить? На самом деле нет никаких флагов, которые отмечают, кто я. Единственный способ предположить, что он использует исходный IP-адрес запроса?

Причина, по которой я спрашиваю, состоит в том, что я из моей корпоративной сети (с одним и тем же общедоступным IP-адресом) захожу на сайт MVC, он действует так, как если бы мы все использовали один сеанс.

Если он на самом деле использует IP, то есть способ изменить его на использование файла cookie SessionID. Я возился с web.config для некоторых других постов, но мне не повезло.

Ваша помощь очень ценится.

Спасибо, Chris

<ч />

Разрешение

Итак, как вы все догадались, оказывается, что я кое-что делаю что-то невероятно неправильное. Я создаю класс, чтобы абстрагировать процесс захвата сессии вар. Класс имеет статические свойства, которые извлекаются из состояния сеанса:

public class SessionValue
{
    private static HttpSessionState Session = HttpContext.Current.Session;

    private const string stepId = "currentStep";
    private const string username = "username";

    public static int StepId
    {
        get
        {
            if (Session[stepId] == null)
            {
                Session[stepId] = 1;
            }

            return (int)Session[stepId];
        }
        set
        {
            Session[stepId] = value;
        }
    }

    public static string Username
    {
        get
        {
            if (Session[username] == null)
            {
                Username = "";
            }

            return (string)Session[username];
        }
        set
        {
            Session[username] = value;
        }
    }
}

По какой-то причине я предполагал, что объявление статической переменной будет воссоздано с каждым веб-запросом, что, безусловно, является очень пьяным заблуждением, поскольку это будет установлено только один раз при первой загрузке приложения. Я до сих пор понятия не имею, с чем это на самом деле было связано, поскольку казалось, что какой-то сеанс поддерживался.

Тем не менее, изменение свойств для непосредственного использования HttpContext.Current.Session [string] решило проблему. Спасибо всем за помощь.

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

Вы уверены, что состояние сеанса не установлено без файлов cookie? (тогда он будет принимать идентификатор сессии из URL)

<sessionState cookieless="true" />

http://yourserver/something/session ID here/something
1 голос
/ 13 ноября 2009

Идентификатор сеанса сохраняется в файле cookie, который ваш браузер отправляет на сервер вместе с каждым запросом.

Это настройка по умолчанию в любом случае. Я думаю, что вы должны увидеть куки в заголовках. Вы уверены, что вы разместили полный заголовок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...