Member 12251184 Ответов: 2

Предупреждение о таймауте сеанса, когда пользователь простаивает в asp.net


Я разрабатываю веб-приложение, используя asp.net, когда пользователь неактивен на странице в течение всего проекта. я должен получить предупреждающее сообщение во всплывающем окне, как будто ваш сеанс истекает через несколько секунд. в этом окне сообщения у меня должны быть две кнопки с именами "остаться войти" и "выйти". когда я нажимаю на кнопку "остаться войти", страница должна стать активной, а всплывающее окно должно закрыться. когда я нажимаю на кнопку "Выйти", он должен перенаправить на страницу входа в систему. Даже не нажав ни одной кнопки до окончания отсчета времени, я должен быть перенаправлен на страницу входа в систему.

Что я уже пробовал:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="cs.aspx.cs" Inherits="cms_video.cs" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head  runat="server">
    <title></title>
    <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.js"></script>
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.10.2/jquery-ui.min.js"></script>
<link rel="stylesheet" href="//ajax.aspnetcdn.com/ajax/jquery.ui/1.10.2/themes/ui-lightness/jquery-ui.css" type="text/css" />
    <style type="text/css">
        body
        {
            font-family: Arial;
            font-size: 10pt;
        }
        .modalBackground
        {
            background-color: Black;
            filter: alpha(opacity=60);
            opacity: 0.6;
        }
        .modalPopup
        {
            background-color: #FFFFFF;
            width: 300px;
            border: 3px solid #0DA9D0;
            border-radius: 12px;
            padding: 0;
        }
        .modalPopup .header
        {
            background-color: #2FBDF1;
            height: 30px;
            color: White;
            line-height: 30px;
            text-align: center;
            font-weight: bold;
            border-top-left-radius: 6px;
            border-top-right-radius: 6px;
        }
        .modalPopup .body
        {
            padding: 10px;
            min-height: 50px;
            text-align: center;
            font-weight: bold;
        }
        .modalPopup .footer
        {
            padding: 6px;
        }
        .modalPopup .yes, .modalPopup .no
        {
            height: 23px;
            color: White;
            line-height: 23px;
            text-align: center;
            font-weight: bold;
            cursor: pointer;
            border-radius: 4px;
        }
        .modalPopup .yes
        {
            background-color: #2FBDF1;
            border: 1px solid #0DA9D0;
        }
        .modalPopup .no
        {
            background-color: #9F9F9F;
            border: 1px solid #5C5C5C;
        }
    </style>
    <script type="text/javascript">
        var timoutWarning = 40000;
       
        var warningTimer;
        
        function StartTimers() {
            warningTimer = setTimeout("SessionExpireAlert()", timoutWarning);
            
        }
        
        function SessionExpireAlert() {

            var timeout = 20000;
            
            var seconds = timer / 1000;
           
            
            document.getElementsByName("seconds").innerHTML = seconds;
            setInterval(function () {
                seconds--;
                document.getElementById("seconds").innerHTML = seconds;

            },1000);
            setTimeout(function () {
                //Show Popup before 20 seconds of timeout.
                $find("mpeTimeout").show();
            }, timeout - 19 * 1000);
            setTimeout(function () {
                
                window.location = "Default.aspx";
            }, timeout);
        };
        function ResetSession() {
            //Redirect to refresh Session.
            window.location = window.location.href;
        }
        function ResetTimers() {
            clearTimeout(seconds);
            SessionExpireAlert
                       }
        
    </script>
</head>
<body >
    <form id="form1"  runat="server" >
        <asp:ScriptManager ID="ScriptManager1" runat="server">
    <div>
        <asp:LinkButton ID="lnkFake" runat="server" />
        <ajaxToolkit:ModalPopupExtender ID="mpeTimeout" BehaviorID="mpeTimeout"  runat="server" PopupControlID="pnlPopup"

        TargetControlID="lnkFake" OkControlID="btnYes" CancelControlID="btnNo" BackgroundCssClass="modalBackground"

        >
    <asp:Panel ID="pnlPopup" runat="server" CssClass="modalPopup" Style="display: none">
        <div[>
            Session Expiring!
        
        <div class="body">
            Your Session will expire in <span id="seconds"></span> seconds.<br />
            Do you want to reset?
        </div>
        <div class="footer" align="right">
            <asp:Button ID="btnYes" runat="server" Text="Yes" CssClass="yes" />
            <asp:Button ID="btnNo" runat="server" Text="No" CssClass="no" />
        </div>
    
    
    </div>
    </form>
</body>
</html>

vipan.net

проверьте ссылку ниже: надеюсь, это вам поможет
http://www.aspsnippets.com/Articles/Automatically-redirect-User-after-Session-Timeout-in-ASPNet.aspx

Chris Maunder

Если это ваш ответ, то опубликуйте его как ответ, а не как вопрос/комментарий

vipan.net

Конечно @Крис .

Member 12251184

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

Member 12251184

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

2 Ответов

Рейтинг:
2

vipan.net

проверьте ссылку ниже, надеюсь, она вам поможет.

Автоматическое перенаправление пользователя после тайм-аута сеанса в ASP.Net


Member 12251184

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

vipan.net

Это просто логика. Измените его в соответствии с вашими потребностями.

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

vipan.net

проверьте нижнюю резьбу


http://stackoverflow.com/questions/1009260/how-can-i-detect-with-javascript-jquery-if-the-user-is-currently-active-on-the-p

http://serkanyersen.github.io/ifvisible.js/

еще одна ссылка для вас

https://github.com/thorst/jquery-idletimer

https://github.com/rigoneri/timeout-dialog.js

Рейтинг:
1

kiquenet.com

c# - путаница файлов Cookie с FormsAuthentication.Метод SetAuthCookie () - Переполнение Стека[^]

Параметр timeout, который вы нашли в файле /system.web/authentication/forms, - это тайм-аут (в минутах) длительности билета аутентификации.

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

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

Возможно, вы захотите сохранить свой файл cookie в течение 10 лет, чтобы пользователю никогда больше не приходилось вставлять имя пользователя и пароль, если только он не решил удалить файл cookie. Файл cookie действителен даже в том случае, если браузер закрыт (когда он сохраняется).

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

То, что вы можете сделать - и то, что я сделал - это написать свое собственное печенье, как это:

FormsAuthenticationTicket authTicket = new
     FormsAuthenticationTicket(1, //version
     userName, // user name
     DateTime.Now,             //creation
     DateTime.Now.AddMinutes(30), //Expiration (you can set it to 1 month
     true,  //Persistent
     userData); // additional informations



Различия: slidingExpiration vs time Expiration vs Persistent cookie ?

Если пул приложений IIS recyles? Рабочий процесс выключения при простое и переработку рабочего процесса файл cookie проверки подлинности не заканчивается, сессия истекает.

Если изменить Global.asax или Web.config, или папку Bin ?