如果应用程序保持空闲状态,如何使会话超时

如何解决如果应用程序保持空闲状态,如何使会话超时

我想在layout.cshtml页面添加会话超时功能。会话超时后,我必须显示TimeOut div来显示消息并再次重新登录。如何从函数Sessionlogout()调用timeout div

下面给出了layout.csHTML代码

<head>

</head>    

<body onload="return disableBack()" ondragstart="return false;" ondrop="return false;">
    @if (HttpContextAccessor.HttpContext.Session.GetString("UserName") == null)
    {
        <div id="TimeOut" class=" text-center">Your session has expired,please<a href="/Home/Index" class="btn signout " style="padding: 1px 5px 1px 5px;">click here to login</a>again</div>
        <div class="main-content hidden">
            @RenderBody()
        </div>
    }
    else
    {
    }
<script type="text/javascript">
{
  $(document).ready(function () {

              Sessionlogout();
         });
 function Sessionlogout()
{
}
}

解决方法

如果您想使用js显示div,这是一个有效的演示:

@using Microsoft.AspNetCore.Http;
@inject IHttpContextAccessor HttpContextAccessor

<div id="session">
</div>

<script>
    $(document).ready(function () {
        var session = '@HttpContextAccessor.HttpContext.Session.GetString("UserName")';
        if (session == "") {
            SessionLogOut();
        }
    });
    function SessionLogOut() {
        $("div#session").append("<div id=\"TimeOut\" class=\"text-center\">Your session has expired,please<a href=\"/Home/Index\" class=\"btn signout\" style=\"padding: 1px 5px 1px 5px;\">click here to login</a>again</div>");

    }
</script>

您的标题是How can I make the session timeout if the application keep idle。请确保您已设置会话超时,如下所示:

services.AddSession(options =>
{
      options.IdleTimeout = TimeSpan.FromSeconds(5);
});

调用您设置会话的方法,然后调用其他方法,并在按住ide超过五秒钟后刷新页面,并显示超时div。

结果:

enter image description here

整个Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });
    services.AddHttpContextAccessor();
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromSeconds(5);
    });
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

public void Configure(IApplicationBuilder app,IHostingEnvironment env)
{
    app.UseSession();

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",template: "{controller=Home}/{action=Index}/{id?}");
    });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?