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分钟:
您可以使用以下代码对特定用户执行相同的操作:
无论选择哪种方法,都可以将超时更改为您认为合理的任何值,以允许用户执行其他操作并仍保持其会话状态。 当然也有缺点:对于用户而言,可能存在安全问题,即在其他人开始使用浏览器时不理会他们的浏览器并使它仍然登录。对于您而言,服务器上存在内存使用问题-会话持续时间越长,一次使用的内存就越多。是否重要取决于服务器上的负载。 如果您不想猜测合理的超时时间,则需要使用已经建议的其他技术之一,这要求浏览器中运行一些JavaScript来定期ping服务器和/或放弃会话。卸载页面时(当然,前提是用户不打算转到您网站上的其他页面)。 这不是一个新问题,如果您想了解会话可以结束的所有方式,则必须处理几种情况,以下是其中一些示例的一般示例: 前两个项目必须由客户端将信息发送到服务器来处理,通常,您将使用javascript导航到注销页面,该页面将使会话快速过期。 通常通过设置会话状态超时(可以是任意时间)来处理第三和第四项。您使用的时间长短基于找到一个值,该值使用户可以使用您的站点而不会使服务器不堪重负。粗略的经验法则可能是30分钟加上或减去10分钟。但是,适当的值可能必须是另一篇文章的主题。 第五项根据您存储会话的方式进行处理。由于状态为会话状态的会话位于计算机的内存中,因此无法重新启动。存储在数据库或cookie中的会话将在重新启动后幸免。您可以按照自己的意愿进行处理。 根据我的经验,当此问题以前出现时,已经确定只需将会话超时设置为可接受的值即可。但是可以做到。 您可以设置较短的会话超时时间(例如5分钟),然后使页面定期轮询服务器,方法是使用Javascript每2分钟触发XmlHttpRequest或通过隐藏iframe指向页面每2分钟刷新一次。 浏览器关闭后,会话将很快超时,因为没有任何内容可以使它保持活动状态。 不幸的是,由于Web的明确性质以及网站服务器和用户浏览器之间没有永久链接的事实,因此无法确定用户何时关闭了浏览器。您可以实现一些事件和JavaScript(例如onunload),可以使用这些事件和JavaScript向服务器发出调用,这些调用又可能会"杀死"会话- 您可以在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不够好,无法为您提供执行该操作的实际说明;抱歉:( |