Я пытаюсь отслеживать что-то и использовать SessionID, поскольку они к этому объекту
Однако SessionID каждые 2-3 reqiests изменения не должны оставаться неизменными?
HttpContext.Session.SessionID
Я использую код.
Я пытаюсь отслеживать что-то и использовать SessionID, поскольку они к этому объекту
Однако SessionID каждые 2-3 reqiests изменения не должны оставаться неизменными?
HttpContext.Session.SessionID
Я использую код.
Я видел, что это происходит даже без MVC. Если я правильно помню, ASP.NET продолжает назначать новые идентификаторы сеанса, пока вы не поместите что-то в переменную Session.
Вы должны инициализировать объект Session в Global.asax.cs
.
void Session_Start(object sender, EventArgs e)
{
HttpContext.Current.Session.Add("__MyAppSession", string.Empty);
}
Таким образом, сеанс не изменится, если ваше окно браузера не будет закрыто.
Я работаю над приложением корзины .NET MVC, и я добавил
Session["myVar"] = "1234";
к методу Page_Load, найденному в коде Default.aspx.cs. Я также добавил
<%= this.Session.SessionID %>
на нижний колонтитул Site.Master. Затем я перестроил свое приложение и просмотрел различные страницы своего приложения, а нижний колонтитул отображает один и тот же идентификатор сеанса для всех страниц, как ожидалось!
Я бы посмотрел на использование TempData, чтобы что-то отслеживать.
Если вы видите, что cookie идентификатора сеанса даже не отправляется в браузер, если он не используется на сервере.
Поэтому, когда в кавычках страниц нет текущего файла cookie идентификатора сеанса, создается новый идентификатор сеанса, поэтому он является случайным.
Это логично, зачем нужно связывать приложение с сеансом, если сеанс не используется?
Попробуйте добавить ключ машины в свой web.config:
Онлайн-генератор ключей: http://aspnetresources.com/tools/keycreator.aspx
Кажется, что сервер сбрасывает машинный ключ для клиента и генерирует новый с новым идентификатором сеанса, каждые несколько минут, что намного ниже, чем нужно. Не знаю, была ли эта ошибка или функция:)
Кроме того, вы можете увеличить тайм-аут состояния сеанса, по умолчанию 20 минут.
У меня была такая же проблема с использованием ASP.NET Web Forms. Мне просто пришлось добавить файл global.asax
в решение, и он исправил его для меня.
Подводя ответы от @jrojo и @Maxam выше, с тем, что я использую.
Я использую AWS DynamoDB в качестве хранилища сеансов (вне сферы действия вопроса немного, но дает образец).
Добавить пакет через NUGET: Install-Package AWS.SessionProvider
Обновить Web.config, чтобы иметь ключи в appSettings:
<add key="AWSAccessKey" value="XXX" />
<add key="AWSSecretKey" value="YYY" />
И провайдер сеанса для system.web:
<sessionState timeout="20"
mode="Custom"
customProvider="DynamoDBSessionStoreProvider">
<providers>
<add name="DynamoDBSessionStoreProvider"
type="Amazon.SessionProvider.DynamoDBSessionStateStore, AWS.SessionProvider"
AWSProfilesLocation=".aws/credentials"
Table="ASP.NET_SessionState"
Region="us-east-1"
/>
</providers>
</sessionState>
Добавить что-нибудь в сеанс в global.asax при запуске сеанса:
void Session_Start(object sender, EventArgs e) {
HttpContext.Current.Session.Add("somethingToForceSessionIdToStick", string.Empty);
}
Подтвердите, добавив это к бритве любой страницы. Обновите эту страницу, затем откройте окно воспламенения и посмотрите другой сеанс:
@HttpContext.Current.Session.SessionID