【问题标题】:How to change session timeout programmatically .Net Core如何以编程方式更改会话超时.Net Core
【发布时间】:2021-04-28 04:18:12
【问题描述】:

startup.cs 我配置会话没有超时

services.AddSession(options =>
        {
            //options.IdleTimeout = TimeSpan.FromSeconds(10); no time out
            options.Cookie.HttpOnly = true;
            options.Cookie.IsEssential = true;
        });

如何在控制器中以编程方式更改该超时?有没有办法为一个特定的会话变量设置超时?如果不是,我如何实现表单会话,在一定时间后表单不会提交并重定向到主页?

【问题讨论】:

    标签: .net asp.net-core .net-core asp.net-core-mvc


    【解决方案1】:

    不,您不能在控制器中更改会话超时。 如果您想确保表单在呈现后的某个时间无法提交,那么您可以执行以下操作:

    如果您使用会话:

    1. 当用户请求表单(视图)时,将当前日期和时间存储在会话中
    2. 当用户提交该表单时,然后从会话中读取当前日期和时间,并将其与当前日期和时间进行比较。如果时间过长(或会话已过期,在这种情况下会话中的日期和时间不再存在),则只需重新显示原始视图(可能带有一些标签或用户花费太多时间的东西)
      注意:当表单开始变得太旧时,您要确保会话超时大于您指定的时间。例如,如果用户在 20 分钟后无法提交,那么您的会话超时应至少为 20 分钟。

    如果您不使用会话:

    1. 当用户请求表单(视图)时,将当前日期和时间存储在返回视图中的隐藏 <input type=hidden> 字段中
    2. 当用户提交该表单时,然后从输入中读取当前日期和时间并将其与当前日期和时间进行比较。如果时间过长,则只需重新显示原始视图(可能带有一些标签或用户花费太多时间的东西)。
      注意:通常这不是最安全的做法,因为用户可以通过浏览器工具更改隐藏字段中的日期/时间,但这对您来说可能已经足够了。

    【讨论】:

    • 这种方法的一个问题是如果用户更改了他们设备上的时间怎么办?对于更安全的提交,这实际上可能是一个问题,对吧?
    • @iamaaarianme 使用第二种方法,用户可以使用浏览器工具更改文档中的时间。然而,当前日期和时间的初始和以后的检索都发生在服务器上。用户计算机的当前时间不会影响任何事情。
    猜你喜欢
    • 2011-09-04
    • 2017-09-13
    • 1970-01-01
    • 2023-04-01
    • 2012-05-18
    • 2012-05-31
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多