بازگشت خودکار کاربر بعد از تمام شدن زمان Session در Asp.Net

در این مقاله میخواهیم در asp.net زمانی که تایم Session یک کاربر تمام شد به صورت خودکار به صفحه login فرستاده شود.

بازگشت خودکار کاربر بعد از تمام شدن زمان Session در Asp.Net

در این مقاله میخواهیم در asp.net زمانی که تایم Session یک کاربر تمام شد به صورت خودکار  به صفحه  login  فرستاده شود.

فایل وب کانفیگ را باز کنید و مقدار session را تنظیم کنید برای این مقاله مقدار را روی یک قرار دادیم:

<sessionState timeout = "1"/>

در صفحه html خود  یک Modal Popup و عنصر span برای نمایش مقدار زمان تمام شدن Session

برای modal  popup  رویداد OnOkScript را تنظیم میکنیم که زمانی که روی دکمه بله کلیک شود تابع ResetSession فراخوانی میشود. BehaviourID  برای دسترسی به  Modal Popup توسط جاوا اسکریپت می باشد و خصوصیت okcontrolID را برابر btnyes و خصوصیت CancelControlID را برابر btnNo قرار میدهیم.

   <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    </asp:ToolkitScriptManager>
    <h3>
       زمان باقیمانده : &nbsp;<span id="secondsIdle"></span>&nbsp;ثانیه</h3>
    <asp:LinkButton ID="lnkFake" runat="server" />
    <asp:ModalPopupExtender ID="mpeTimeout" BehaviorID="mpeTimeout" runat="server" PopupControlID="pnlPopup"
        TargetControlID="lnkFake" OkControlID="btnYes" CancelControlID="btnNo" BackgroundCssClass="modalBackground"
        OnOkScript="ResetSession()">
    </asp:ModalPopupExtender>
    <asp:Panel ID="pnlPopup" runat="server" CssClass="modalPopup" Style="display: none">
        <div class="header">
            Session
        </div>
        <div class="body">
            Session شما منقضی خواهد شد تا &nbsp;<span id="seconds"></span>&nbsp;ثانیه.<br />
           آیا میخواد مجددا تمدید شود؟
        </div>
        <div class="footer" align="right">
            <asp:Button ID="btnYes" runat="server" Text="بله" CssClass="yes" />
            <asp:Button ID="btnNo" runat="server" Text="خیر" CssClass="no" />
        </div>
    </asp:Panel>

فضا نام های زیر مورد نیاز است :


using System.Configuration;
using System.Web.Configuration;

در رویداد page_load  مقدار timeout برای Session را از فایل webconfig میخونیم و به تابع جاوا اسکریپت SessionExpireAlert پاس میدهیم:


protected void Page_Load(object sender, EventArgs e)
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    if (!this.IsPostBack)
    {
        Session["Reset"] = true;
        Configuration config = WebConfigurationManager.OpenWebConfiguration("~/Web.Config");
        SessionStateSection section = (SessionStateSection)config.GetSection("system.web/sessionState");
        int timeout = (int)section.Timeout.TotalMinutes * 1000 * 60;
        ClientScript.RegisterStartupScript(this.GetType(), "SessionAlert", "SessionExpireAlert(" + timeout + ");", true);
    }
}

تابع زیر مقدار timeout برای Session را از سرور میگیرد  و در یک شمارنده نشان میدهد. زمانی که 20 ثانیه از زمان session باقی مانده Modal Popup نمایش داده میشود.

اگر کاربر روی دکمه بله کلیک کند  صفحه redirect میشود و زمان از نو شروع میشود  و اگر کاربر روی no کلیک کند Modal Popup بسته میشود و زمانی که زمان Session تمام شود کاربر یه صفحه Session Expired فرستاده میشود.


<script type="text/javascript">
function SessionExpireAlert(timeout) {
    var seconds = timeout / 1000;
    document.getElementsByName("secondsIdle").innerHTML = seconds;
    document.getElementsByName("seconds").innerHTML = seconds;
    setInterval(function () {
        seconds--;
        document.getElementById("seconds").innerHTML = seconds;
        document.getElementById("secondsIdle").innerHTML = seconds;
    }, 1000);
    setTimeout(function () {
        //Show Popup before 20 seconds of timeout.
        $find("mpeTimeout").show();
    }, timeout - 20 * 1000);
    setTimeout(function () {
        window.location = "Expired.aspx";
    }, timeout);
};
function ResetSession() {
    //Redirect to refresh Session.
    window.location = window.location.href;
}
</script>

فایل های ضمیمه