2020年11月17日 星期二

[研究][JavaScript] 用 timeout-dialog.js 做 Session Time Out 前 60 秒自動彈出倒數計時對話盒視窗

[研究][JavaScript] 用 timeout-dialog.js 做 Session Time Out 前 60 秒自動彈出倒數計時對話盒視窗

2020-11-17

環境 Visual Studio 2019 v16.8.1 版 + C# + ASP.NET  + WebForm + jQuery + jQuery UI + timeout-dialog.js

jQuery 和 jQuery UI 可用 NuGet 安裝

其中 timeout-dialog.js 只能手動下載安裝。

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


Default.aspx

測試兩個小範例,1個是網頁載入後,Session Time Out 前 60 秒自動彈出倒數計時對話盒視窗。

另一個範例,Click 一個超連結,會跳出 60 秒自動彈出倒數計時對話盒視窗。


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

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <%--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>--%>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

    <%--<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"></script>--%>

    <%--不可用,畫面會走樣--%>
    <%--<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">--%>

    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

    <%--去網站 https://github.com/rigoneri/timeout-dialog.js 下載套件--%>
    <script src="Scripts/timeout-dialog/js/timeout-dialog.js"></script>
    <link href="Scripts/timeout-dialog/css/index.css" rel="stylesheet" />
    <link href="Scripts/timeout-dialog/css/timeout-dialog.css" rel="stylesheet" />
    <%--    
    <link rel="stylesheet" href="css/index.css" type="text/css" media="screen, projection" />
    <link rel="stylesheet" href="css/timeout-dialog.css" type="text/css" media="screen, projection" />
    --%>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <a href="#" id="timeout-example">Click Here to See Demo</a>
        </div>
    </form>
    <script type="text/javascript">
        var SessiontimeLeft = <%= Session.Timeout * 60 %>;
        ////https://rigoneri.github.io/timeout-dialog.js/
        //timeout	number	1200	The number of your session timeout(in seconds).The timeout value minus the countdown value determines how long until the dialog appears.
        //countdown	number	60	The countdown total value(in seconds).
        $(document).ready(function () {
            SessiontimeLeft = 70;   // 網頁載入完成後,Session Time 為 70 sec
            // 剩下 60 秒開始跳出對話盒視窗,進行倒數 (所以網頁載入 70-60=10 開始跳出對話盒視窗)
            $.timeoutDialog({ timeout: SessiontimeLeft, countdown: 60, logout_redirect_url: '../sessionLogout.htm', restart_on_yes: false });
            //$.timeoutDialog({ timeout: 1, countdown: 60, logout_redirect_url: 'https://github.com/rigoneri/timeout-dialog.js', restart_on_yes: false });
        });
    </script>
    <script type="text/javascript">
        /*<![CDATA[*/
        $(function () {
            $("#timeout-example").click(function (e) {
                e.preventDefault();
                $.timeoutDialog({ timeout: 1, countdown: 60, logout_redirect_url: 'https://github.com/rigoneri/timeout-dialog.js', restart_on_yes: false });
            });
        });
/*]]>*/
</script>

</body>
</html>


SessiontimeLeft = 70;  若拿掉,則根據下面這行

var SessiontimeLeft = <%= Session.Timeout * 60 %>;

SessiontimeLeft = 20*60 = 1200 秒 (20 分鐘)

Default.aspx.cs  (不用特別去修改)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

Web.Config (預設 20 分鐘,可以不用特別去設定)

<configuration>
  <system.web>
    <sessionState timeout="20"></sessionState>
  </system.web>
</configuration>

(下圖)執行結果,等10秒就會出現



(下圖) 缺 jQuery UI 執行結果,不會出現對話盒,60 秒也不會倒數,也不會出現任何錯誤訊息。
(下圖) 缺 jQuery 執行結果,不會出現對話盒,訊息也不出現,也不會出現任何錯誤訊息。
********************************************************************************
2020-11-19
視窗彈出後,不管按下 Yes, Keep me signed in 或 No, Sign ne out 或倒數至 0秒,都會出現錯誤。

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

顯示 timeout-dialog.js v1.0.1, 01-03-2012,已經多年沒有改版了。

(完)

相關

[研究][JavaScript] 用 timeout-dialog.js 做 Session Time Out 前 60 秒自動彈出倒數計時對話盒視窗
http://shaurong.blogspot.com/2020/11/javascript-timeout-dialogjs-session.html

[研究][C#][ASP.NET][WebForm] Sessionn Time Out 自動登出前倒數計時
http://shaurong.blogspot.com/2020/11/caspnetwebform-sessionn-time-out.html

[研究][C#][ASP.NET][WebForm] Master Page 的 Sessionn Time Out 自動登出前倒數計時
http://shaurong.blogspot.com/2020/11/caspnetwebform-master-page-sessionn.html



沒有留言:

張貼留言