会话幸免于浏览器关闭?我要防止这种情况吗?

问题描述

| 我有一个PHP应用程序,需要登录,提供注销选项,并强制注销X分钟内不活动的用户。 但是,如果我登录关闭浏览器并重新打开,则$ _SESSION变量仍然存在。 这里的一般做法是什么?我是否应该防止这种情况发生? 我的内心只想将关闭浏览器视为注销...,一方面,它是一个安全的应用程序(因为它需要登录),但是非技术用户可能会合理地期望,如果他们关闭整个浏览器,则不会可以看到他们的私人数据。 Otoh,如果浏览器崩溃并且用户重新启动它,他可能希望从上次停下来的地方继续学习... 别人做什么?     

解决方法

        PHP会话通过将cookie包含服务器上会话ID的cookie保存到用户的浏览器来工作。因此,PHP会话的工作方式与普通Cookie完全相同。 如果关闭浏览器,则cookie是永久的。服务器不知道用户使用的是哪个浏览器实例,浏览器是否已重新启动,或者计算机是否已重新启动。 在此处提供注销按钮是最常见的做法,但是如果出于某种原因您需要在浏览器关闭时注销用户,则您必须实现一些客户端功能,因为浏览器不会发送任何内容在服务器关闭时向服务器发出信号。 如果您担心安全性-即您正在编写高度安全的应用程序(例如付款网关),则可以遵循银行网站或其他付款网关的做法; 当用户返回该站点时,他们仍会登录,但是当他们尝试执行任何会影响已登录用户的操作,使用另一个密码屏幕重新进行身份验证或要求提供一些令人难忘的信息时。     ,        这是经典行为,您可以在许多站点上观察到它,包括Stack Overflow :) 您的会话变量绑定到浏览器中的cookie。如果您希望在浏览器关闭时真正注销用户,请将会话cookie的时间设置为零。     ,        显式设置cookie时,可以选择其过期时间。当您使用session_start()生成会话cookie时,其过期时间由php.ini中的session.cookie_lifetime值确定。如果将其设置为0,则会话cookie将在关闭浏览器窗口时过期。