如果用户用java关闭浏览器,如何清除httpsession
如果消费者关闭浏览器窗口,我试图清除HttpSession。我不知道怎么做,请帮助我任何人 谢谢和问候 Chakri编辑: 试着读一下这个问题的答案 “HTTP不是一种连续对话协议,在这种协议中,客户端连接到服务器,并异步交换信息,直到 客户端断开连接 相反,每个HTTP客户端请求的行为就像它登录一样,不是吗 然后注销。此请求/响应周期重复,直到 客户端停止发送请求 任何时候都不允许服务器向客户端发送响应 除非它是为了响应一个特定的实际请求,而且只有一个 每个请求都允许响应 因此,您不能让服务器向客户端发布“您超时”页面。 你能得到的最接近的回答是“你超时了” 客户机发出请求时的响应页面 人们想要做的另一件普通事情是通知服务器 客户端已关闭浏览器、窗口或选项卡。没有协议 定义用于万维网处理该问题。如果用户关闭 服务器窗口/选项卡,客户端不会通知服务器。自 没有要删除的正在进行的会话(请记住,连接 仅持续足够长的时间,服务器才能接受请求并返回请求 响应),服务器不可能知道客户机去了 走开。” 总结: 你不能这么做 可能的解决办法: 您只需依赖会话超时即可。超时可能随时发生,您甚至无法知道用户是否正在查看您的某个页面。很可能当时他们正在看小猫的视频如果用户用java关闭浏览器,如何清除httpsession,java,javascript,html,jsp,jsp-tags,Java,Javascript,Html,Jsp,Jsp Tags,如果消费者关闭浏览器窗口,我试图清除HttpSession。我不知道怎么做,请帮助我任何人 谢谢和问候 Chakri编辑: 试着读一下这个问题的答案 “HTTP不是一种连续对话协议,在这种协议中,客户端连接到服务器,并异步交换信息,直到 客户端断开连接 相反,每个HTTP客户端请求的行为就像它登录一样,不是吗 然后注销。此请求/响应周期重复,直到 客户端停止发送请求 任何时候都不允许服务器向客户端发送响应 除非它是为了响应一个特定的实际请求,而且只有一个 每个请求都允许响应 因此,您不能让服务器
如果您可以让浏览器(可靠地)通知服务器用户已关闭窗口,那么服务器可以根据ejay_francisco提供的原始答案调用
session.invalidate()
困难在于让通知可靠地发生。检测车窗关闭的方法多种多样;e、 g.如这些问题(及类似问题)所述:
然而,我认为任何方案都无法处理用户浏览器死机、用户机器关闭以及类似情况。因此,如果您需要在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容器应该“自动”处理会话,以便让开发人员专注于业务逻辑。