Конец сессии в ASP.net MVC

Я проверил его в других приложениях и средах и заметил, что он работает в версии "yiisoft/yii2-redis": "2.0.8" и в "yiisoft/yii2-redis": "2.0.9" выдает ошибку ( sweelix \ rbac \ redisManager в строке 364 ]: $ruleGuid = $this->db->executeCommand('HGET', [$this->getRuleMappingKey(), $item->ruleName]);). Если принудительно переключиться на версию пакета « 2.0.8 », ошибка исчезнет.

10
задан Tony Borf 13 May 2009 в 17:32
поделиться

4 ответа

Я использую некоторый Javascript в моем MasterPage, чтобы перенаправить пользователя (после запроса на возобновление сеанса) к действию выхода из системы. Он использует запрос AJAX обратно на домашнюю страницу приложения, чтобы обновить окно сеанса на стороне сервера, когда пользователь нажимает кнопку в диалоговом окне, чтобы продлить сеанс. Для диалогового окна полагается на jQuery и пользовательский интерфейс jQuery.

 <% if (this.Request.IsAuthenticated)
    {
        int sessionDialogWait = 2 * 60 * 1000 - 60 * 500; // ms = 1.5 minutes
        int sessionTimeout = 28 * 60 * 1000; // ms = 28 minutes
        if (ViewData["sessionTimeout"] != null)
        {
            sessionTimeout = ((int)ViewData["sessionTimeout"] * 60 - 120) * 1000;
        }
%>  
<script type="text/javascript">
    var logoutTimer = null;
    var sessionTimer = null;
    var sessionTimeout = Number('<%= sessionTimeout %>');
    var sessionDialogWait = Number('<%= sessionDialogWait %>');

    $(document).ready( function() {
        $('#sessionEndDialog').dialog( {
            autoOpen: false,
            bgiframe: true,
            modal: true,
            buttons: {
                OK: function() {
                    $(this).dialog('close');
                    $.get( '<%= Url.Action( "About", "Home" ) %>', scheduleSessionPrompt, 'html' );
                },
                Logout: logoutOnSessionExpires
            }
        }).ajaxStart( function() { scheduleSessionPrompt(); } );
        scheduleSessionPrompt();
    });

    function scheduleSessionPrompt()
    {
        if (logoutTimer) clearTimeout(logoutTimer);
        if (sessionTimer) clearTimeout(sessionTimer);

        sessionTimer = setTimeout( sessionExpiring, sessionTimeout  );
    }

    function sessionExpiring()
    {
         logoutTimer = setTimeout( logoutOnSessionExpires, sessionDialogWait );
         $('#sessionEndDialog').dialog('open');
    }

    function logoutOnSessionExpires()
    {
        window.location.href = '<%= Url.Action( "Logout", "Account" ) %>';
    }       

    </script>
<% } %>

<div id="sessionEndDialog" title="Session Expiring" style="display: none;">
    <p>Your session is about to expire.  Click OK to renew your session or Logout to logout of the application.</p>
</div>
15
ответ дан 3 December 2019 в 15:53
поделиться

Я предполагаю, что вы каким-то образом аутентифицируете пользователя, но используете ли вы аутентификацию с помощью форм?:

ASP.Net MVC Framework - Использование аутентификации с помощью форм

Если вы ' Если уже используется проверка подлинности с помощью форм, необходимо убедиться, что срок действия cookie проверки подлинности немного короче, чем время ожидания сеанса.

6
ответ дан 3 December 2019 в 15:53
поделиться

У меня была такая же проблема со старым приложением ASP.net. Срок действия сеанса истекает, но пользователь все еще аутентифицирован, поскольку файлы cookie сеанса и аутентификации различны и не обязательно истекают одновременно. Тогда я использовал global.asax Session_Start, чтобы проверить, прошел ли пользователь аутентификацию, и вывести его из системы.

    protected void Session_Start(Object sender, EventArgs e)
    {
        if (User.Identity.IsAuthenticated)
        {
            FormsAuthentication.SignOut();
            Response.Redirect("~/SessionEnd.aspx");
        }
    }

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

6
ответ дан 3 December 2019 в 15:53
поделиться

Данные могут все еще находиться на странице, потому что браузер кэширует их.

Попробуйте добавить это и посмотрите, остались ли данные после завершения сеанса:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
0
ответ дан 3 December 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: