如果用户用java关闭浏览器,如何清除httpsession

如果用户用java关闭浏览器,如何清除httpsession,java,javascript,html,jsp,jsp-tags,Java,Javascript,Html,Jsp,Jsp Tags,如果消费者关闭浏览器窗口,我试图清除HttpSession。我不知道怎么做,请帮助我任何人 谢谢和问候 Chakri编辑: 试着读一下这个问题的答案 “HTTP不是一种连续对话协议,在这种协议中,客户端连接到服务器,并异步交换信息,直到 客户端断开连接 相反,每个HTTP客户端请求的行为就像它登录一样,不是吗 然后注销。此请求/响应周期重复,直到 客户端停止发送请求 任何时候都不允许服务器向客户端发送响应 除非它是为了响应一个特定的实际请求,而且只有一个 每个请求都允许响应 因此,您不能让服务器

如果消费者关闭浏览器窗口,我试图清除HttpSession。我不知道怎么做,请帮助我任何人

谢谢和问候 Chakri

编辑:

试着读一下这个问题的答案

“HTTP不是一种连续对话协议,在这种协议中,客户端连接到服务器,并异步交换信息,直到 客户端断开连接

相反,每个HTTP客户端请求的行为就像它登录一样,不是吗 然后注销。此请求/响应周期重复,直到 客户端停止发送请求

任何时候都不允许服务器向客户端发送响应 除非它是为了响应一个特定的实际请求,而且只有一个 每个请求都允许响应

因此,您不能让服务器向客户端发布“您超时”页面。 你能得到的最接近的回答是“你超时了” 客户机发出请求时的响应页面

人们想要做的另一件普通事情是通知服务器 客户端已关闭浏览器、窗口或选项卡。没有协议 定义用于万维网处理该问题。如果用户关闭 服务器窗口/选项卡,客户端不会通知服务器。自 没有要删除的正在进行的会话(请记住,连接 仅持续足够长的时间,服务器才能接受请求并返回请求 响应),服务器不可能知道客户机去了 走开。”

总结:

你不能这么做

可能的解决办法:

您只需依赖会话超时即可。超时可能随时发生,您甚至无法知道用户是否正在查看您的某个页面。很可能当时他们正在看小猫的视频


如果您可以让浏览器(可靠地)通知服务器用户已关闭窗口,那么服务器可以根据ejay_francisco提供的原始答案调用
session.invalidate()

困难在于让通知可靠地发生。检测车窗关闭的方法多种多样;e、 g.如这些问题(及类似问题)所述:

然后,您可以编写(javascript)关闭事件处理程序向服务器发送特定请求


然而,我认为任何方案都无法处理用户浏览器死机、用户机器关闭以及类似情况。因此,如果您需要在100%的时间内清除会话,那么您可能运气不佳。我认为这是不可能的。

如果关闭浏览器,则已清除会话

但是如果您想强制清除会话

使用
session.invalidate()

或者,如果要删除特定会话,请使用
session.removeAttribute(“”)

简短回答:你不能。幸运的是,会话在一段时间后自动过期;查看servlet引擎文档,了解如何设置此超时时间


我觉得应该有一种方法可以通过JavaScript实现这一点;不幸的是,JavaScript似乎没有onWindowClose处理程序。

它可以以稍微不同的方式存档

  • 使用名为“window.onbeforeunload”的javascript事件

    e、 g window.onbeforeunload=mylogic_函数(); 函数mylogic_函数() { window.location.href=“验证会话的servlet路径”; }

  • 有一个专门的servlet,它的任务只是停用会话

  • 试试这个..希望它能起作用

    您的会话存储在哪里?在饼干中?很久以前我就尝试过解决这个问题,我亲爱的兄弟:)看看它是否有用@sᴜʀᴇsʜᴀᴛᴛᴀ, 我知道session.invalidate();是否清除了会话数据,但我不知道如何检测消费者是否关闭了浏览器?我认为OP是在询问如何获得服务器端用户代理(客户端)关闭事件的通知。这很好,但在SO中,作为答案的链接是非常不受欢迎的。这种联系可能会消失。您需要在此处提供实际答案,并且仅使用链接作为进一步阅读的参考。@Gimby感谢您帮助我改进我的答案。经验教训为什么这个答案被否决了?我使用类似的方法。属性为null,然后当有人登录时,我将该属性设置为用户名。如果他们再次尝试登录,并且名称为!=null,则不允许他们再次登录(原因很难解释),但如果他们关闭浏览器,会话将结束,并且当他们再次登录时启动的新会话的属性再次为null。我的初学者理解是servlet容器应该“自动”处理会话,以便让开发人员专注于业务逻辑。