如何将asp.net会话显式设置为仅在关闭浏览器或显式登录时到期?

如何将asp.net会话显式设置为仅在关闭浏览器或显式登录时到期?

How do I explicitly set asp.net sessions to ONLY expire on closing the browser or explicit logou?

默认情况下,会话到期时间似乎为20分钟。

更新:在关闭浏览器之前,我不希望会话过期。

Update2:这是我的情况。用户登录站点。在网站上播放。离开计算机去洗个澡(> 20分钟;)。回到电脑上,应该可以玩了。他关闭浏览器,删除会话cookie。下次他从新的浏览器实例访问该站点时,需要再次登录。

在PHP中,我可以将php.ini中的session.cookie_lifetime设置为零以实现此目的。


如果要将会话延长至20分钟以上,则可以使用IIS管理员更改默认设置,也可以在web.config文件中进行设置。例如,要在web.config中将超时设置为60分钟:

1
2
3
4
5
6
7
<configuration>
  <system.web>
    <sessionState timeout="60" />
    ... other elements omitted ...
  </system.web>
  ... other elements omitted ....
</configuration>

您可以使用以下代码对特定用户执行相同的操作:

1
Session.Timeout = 60

无论选择哪种方法,都可以将超时更改为您认为合理的任何值,以允许用户执行其他操作并仍保持其会话状态。

当然也有缺点:对于用户而言,可能存在安全问题,即在其他人开始使用浏览器时不理会他们的浏览器并使它仍然登录。对于您而言,服务器上存在内存使用问题-会话持续时间越长,一次使用的内存就越多。是否重要取决于服务器上的负载。

如果您不想猜测合理的超时时间,则需要使用已经建议的其他技术之一,这要求浏览器中运行一些JavaScript来定期ping服务器和/或放弃会话。卸载页面时(当然,前提是用户不打算转到您网站上的其他页面)。


这不是一个新问题,如果您想了解会话可以结束的所有方式,则必须处理几种情况,以下是其中一些示例的一般示例:

  • 浏览器实例或选项卡已关闭。
  • 用户使用相同的浏览器实例或标签浏览您的网站。
  • 用户将失去与Internet的连接(这可能包括用户计算机的电源中断或任何其他方式)。
  • 用户离开计算机(或以其他方式停止与您的站点进行交互)。
  • 服务器断电/重启。
  • 前两个项目必须由客户端将信息发送到服务器来处理,通常,您将使用javascript导航到注销页面,该页面将使会话快速过期。

    通常通过设置会话状态超时(可以是任意时间)来处理第三和第四项。您使用的时间长短基于找到一个值,该值使用户可以使用您的站点而不会使服务器不堪重负。粗略的经验法则可能是30分钟加上或减去10分钟。但是,适当的值可能必须是另一篇文章的主题。

    第五项根据您存储会话的方式进行处理。由于状态为会话状态的会话位于计算机的内存中,因此无法重新启动。存储在数据库或cookie中的会话将在重新启动后幸免。您可以按照自己的意愿进行处理。

    根据我的经验,当此问题以前出现时,已经确定只需将会话超时设置为可接受的值即可。但是可以做到。


    您可以设置较短的会话超时时间(例如5分钟),然后使页面定期轮询服务器,方法是使用Javascript每2分钟触发XmlHttpRequest或通过隐藏iframe指向页面每2分钟刷新一次。

    浏览器关闭后,会话将很快超时,因为没有任何内容可以使它保持活动状态。


    不幸的是,由于Web的明确性质以及网站服务器和用户浏览器之间没有永久链接的事实,因此无法确定用户何时关闭了浏览器。您可以实现一些事件和JavaScript(例如onunload),可以使用这些事件和JavaScript向服务器发出调用,这些调用又可能会"杀死"会话-Session.Abandon();

    您可以在web.config中设置会话的超时时间,请记住,此超时基于自用户上次对服务器的调用以来的时间。

    浏览器超时未添加。


    这是默认设置。进行会话时,它将会话存储在" Session Cookie "中,当关闭浏览器时,该会话Cookie会自动删除。

    如果要在2个浏览器会话之间进行会话,则必须将Cookie设置为过期。功能中的日期为

    因为您要谈论的会话是由服务器存储的,而不是由客户端存储的,所以您无法做您想做的事情。

    但是请考虑不要使用ASP.NET服务器端会话,而只能依靠cookie。


    哦,您已经重写了问题。

    只要javascript仍然存在,那绝对是可行的。使用任何定时的ajax都可以。使用Ajax计时器插件检查原型库http://www.prototypejs.org PeriodicalExecutor或jQuery。设置一个虚拟页面,您的执行者会不时调用该页面,因此您的会话始终处于活动状态,除非他注销(同时杀死ajax计时器)或关闭浏览器(这意味着执行者仍然被杀死)


    如果我误解了您的问题的意图,请纠正我,但是潜在的问题似乎与如何在用户关闭浏览器时强制会话结束无关,而更多地与如何防止会话直到浏览器结束有关已关闭。

    我认为对此的真正答案是重新评估您正在使用会话执行的操作。如果您使用它们来维持状态,则我同意您可能不走运的其他答复。

    但是,一种首选方法是使用一种持久状态机制,该机制的作用域与浏览器会话相同,例如cookie,它在关闭浏览器时会过期。如果cookie自上次请求以来已过期,则该cookie可能仅包含足够的信息来重新启动服务器上的会话。结合相对较短的会话超时(5-10分钟),我认为这可以在服务器资源使用与不使用户不断"重新启动"站点之间达到最佳平衡。


    您不能,因为您无法控制html客户端的响应方式。

    实际上您为什么需要这样做?只要没有人可以再次使用该会话,该会话将在20分钟后过期。如果资源确实很重要,请设置一个更激进的会话到期时间(大多数托管公司这样做,这很令人讨厌)或在会话中使用较少的对象。尝试避免使用任何类型的对象,而只存储用于检索它们的密钥,这是非常重要的设计,因为它可以帮助您在会话变大时将会话扩展到状态服务器。


    如果在关闭窗口时客户端与服务器之间没有进行某种形式的通信,则无法明确清除会话,因此我希望发送一个特殊的URI请求来清除会话在收到窗口关闭消息时。

    我的Javascript不够好,无法为您提供执行该操作的实际说明;抱歉:(


    推荐阅读

      linux命令行模式登录?

      linux命令行模式登录?,系统,密码,信息,状态,情况,终端,环境,管理,电脑,位置,l

      linux命令行退出登录?

      linux命令行退出登录?,状态,平台,软件,异常,密码,系统,命令,程序,模式,文件,l

      linux设默认网关命令?

      linux设默认网关命令?,信息,地址,网关,网络,系统,状态,中心,命令,终端,路由,l

      linux登录系统的命令?

      linux登录系统的命令?,系统,工作,地址,名称,网络,密码,信息,服务,软件,资料,l

      linux远程登录的命令?

      linux远程登录的命令?,地址,密码,系统,名称,服务,网络,命令,软件,工作,服务

      linux命令行登录上网?

      linux命令行登录上网?,网络,系统,工具,设备,地址,最新,工作,数据,网址,信息,l

      linux用户登录的命令?

      linux用户登录的命令?,系统,信息,工作,地址,时间,密码,名称,命令,电脑,软件,l

      linux命令用账号登录?

      linux命令用账号登录?,密码,系统,管理,地址,软件,联系方式,状态,用户,用户

      linux命令界面登录?

      linux命令界面登录?,系统,工具,密码,数字,设备,终端,软件,工作,服务,状态,lin

      linux默认命令删除?

      linux默认命令删除?,系统,软件,名称,档案,命令,文件,目录,不了,电脑,文件夹,

      linux远程登录命令?

      linux远程登录命令?,软件,地址,系统,服务,名称,网站,数字,网络,电脑,密码,如

      linux免密钥登录命令?

      linux免密钥登录命令?,密码,数据,流程,服务,标准,网络,网上,认证,证书,代码,L

      linuxrm命令默认?

      linuxrm命令默认?,系统,命令,档案,工作,文件,目录,名称,文件夹,选项,子目录,l

      linux登录命令界面?

      linux登录命令界面?,系统,密码,终端,工具,首页,环境,数字,状态,信息,界面,lin

      linux登录改密码命令?

      linux登录改密码命令?,密码,系统,名称,软件,状态,服务,信息,策略,环境,命令,

      linux命令默认加后缀?

      linux命令默认加后缀?,系统,文件,密码,通用,设备,命令,目录,后缀,表示,程序,l

      登录账户命令linux?

      登录账户命令linux?,系统,管理,信息,工作,工具,名称,服务,网络,密码,命令,lin

      ssh命令登录linux?

      ssh命令登录linux?,服务,系统,地址,软件,状态,网络,命令,计算机,终端,服务器

      db2登录命令linux?

      db2登录命令linux?,环境,服务,系统,管理,工作,网站,软件,一致,平台,信息,linu

      linux默认浏览器命令?

      linux默认浏览器命令?,环境,系统,发行,工程,工具,浏览器,软件,情况,网站,管