Странный выход из системы на веб-сайте ASP.NET 3.5 - PullRequest
0 голосов
/ 19 июля 2010

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

Вот симптомы:

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

Время от времени, когда пользователь нажимает на ссылку, страница загружается очень долго, но фактически никогда не загружается, и пользователь переходит на страницу входа.

Кроме того, после того, как на веб-сайте произошло исключение, пользователь затем попадает на страницу входа. Как будто исключение как-то очищает сеанс.

Кто-нибудь из вас знает ситуацию, в которой это может произойти?

Код, который я использую на каждой странице в моем приложении, выглядит следующим образом:

If (Not User.Identity.IsAuthenticated) Then  
    Response.Redirect("../login2.aspx")
End If  

' If session timeout then return to login screen '
If ((Session("LocationId") Is DBNull.Value) Or (Session("LocationId") Is Nothing)) 
Then  
   Response.Redirect("../login2.aspx")   
End If

Код в web.config:

<sessionState cookieless="false" timeout="600" />
<authentication mode="Forms">
<forms timeout="600" />
<system.web>
    <authorization>
        <allow users="*"/>
    </authorization>
</system.web>

Ответы [ 5 ]

1 голос
/ 19 июля 2010

Относящиеся к этому сценарию * `

".... после возникновения исключения на сайте, пользователь тогда выбрасывается на страницу входа. Это как если бы исключение как-то очищает сессия

Я знаю одну возможную ситуацию, когда это может произойти. Это очень хорошо, особенно в сценарии производства по нескольким причинам, но я видел, как это произошло: -)

Если сеанс находится в памяти и запись ведется путем записи в файл журнала, который находится в каталоге Bin приложения, это может произойти, поскольку изменение папки bin веб-приложения приводит к перезапуску приложения, т.е. потеря памяти.

Только один возможный сценарий. Если ваш сеанс находится не в памяти ИЛИ ваш механизм регистрации не такой, то это не относится к вам.

1 голос
/ 19 июля 2010

Почему вы используете этот код на каждой странице?

.NET авторизация и аутентификация, как правило, заботятся обо всех этих вещах, если они настроены правильно.

0 голосов
/ 05 августа 2010

Прежде всего, вам нужно запретить доступ неаутентифицированным (анонимным) пользователям:

<authorization>
    <deny users="?" />
</authorization>

Вы настроили страницы по умолчанию и страницы входа?

<authentication mode="Forms">
    <forms name=".ASPXFORMSAUTH" loginUrl="Login.aspx" defaultUrl="Default.aspx" slidingExpiration="true" timeout="30" />
</authentication>

nameзадает имя файла cookie, полезно, если вы будете использовать встроенную инфраструктуру безопасности .NET 2.0 (роли, членство и т. д.)

slidingExpiration включено нормальное поведение тайм-аута - любое действие пользователя сбрасывает таймаут

0 голосов
/ 05 августа 2010

Если вы просто используете обычную функциональность сеанса в asp.net, я считаю, что сеанс истекает через 15-30 минут бездействия (обычно я не использую сеанс, поэтому я помню, что он где-то в этом диапазоне).При каждой обратной передаче на сервер этот таймер сбрасывается, поэтому, если пользователь активно что-то делает, он не срабатывает в течение этого времени.

Поскольку загрузка страницы занимает много времени, скорее всего, это связано с рабочим процессом.перезапуск, и этот пользователь является первым пользователем, получившим доступ к сайту после перезапуска, который запускает IIS для выполнения всей его работы по компиляции и затем обслуживает страницу, которая вызывает задержку.Это происходит только для первого посетителя после перезагрузки рабочего процесса.Вы можете изменить это поведение в IIS, чтобы оно выполнялось по расписанию, а не после того, как определенное количество времени прошло без активности.Это приведет к тому, что ваш рабочий процесс займет больше памяти, хотя, в зависимости от вашей среды, это может быть не очень хорошим изменением.

РЕДАКТИРОВАТЬ: я должен добавить, что код, который вы опубликовали, объясняет, почему пользователя выгналивернуться на страницу входа.Он проверяет, что в сеансе что-то есть, и если там ничего нет, он возвращает пользователя обратно на страницу входа.Таким образом, если они неактивны в течение слишком длительного времени ожидания сеанса, значит, он очищен, и пользователь возвращается на страницу входа в систему с помощью вашего кода.Также вам следует использовать FormsAuthentication.RedirectToLoginPage ();для вашего перенаправления вместо Response.Redirect.Таким образом, после входа они возвращаются на страницу, которую они запрашивали изначально.

0 голосов
/ 05 августа 2010

Я обращаюсь ко всем экспертам по точечным сетям, потому что я действительно в отчаянии,

позвольте мне дать еще один симптом проблемы, потому что она все еще сохраняется,

сервер оченьсильный сервер - Intel Xeon с оперативной памятью 3 ГБ, поэтому, вероятно, это не проблема ресурсов.

Когда пользователь использует систему постоянно, нет проблем, и он может работать свободно, проблема возникает, когда пользовательпокидает компьютер (или приложение в этом отношении) на 5 минут, затем, когда она хочет продолжить работу, и щелкает ссылку в приложении, она попадает на страницу входа.когда она пытается войти снова, ей это удается, но после того, как она нажимает другую ссылку, она снова выбрасывается, затем, когда она входит в систему, она может работать свободно и все в порядке.

Каким-то образом сеанс очищается, когдасайт простаивает.позвольте мне подчеркнуть, что этого не происходит, когда я запускаю приложение в visual studio, только в iis.

Приложение было преобразовано из asp.net 2.0 в 3.5,

и все, спасибо

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