我有一个PHP应用程序需要登录,提供注销选项并强制注销已经处于非活动状态X分钟的用户。
但是,如果我登录,关闭浏览器并重新打开它,$ _SESSION变量仍然存在。
这里的一般做法是什么?我是否应该阻止这种情况,如果是这样,怎么办?
我的一些东西只是想把关闭浏览器视为注销...一方面,它是一个安全的应用程序(因为它需要登录)但是非技术用户可能合理地期望如果他们关闭整个浏览器然后没有人能看到他们的私人数据。 Otoh,如果浏览器崩溃并且用户重新启动它,他可能希望在他离开的地方继续...
其他人做了什么?
答案 0 :(得分:4)
PHP会话通过将cookie保存到包含服务器上会话ID的用户浏览器来工作。 因此,PHP会话的工作方式与普通的Cookie完全相同。
如果您关闭浏览器,Cookie会持久存在。服务器不知道用户正在使用的浏览器的实例,浏览器是否已重新启动,或者即使计算机已重新启动。
提供注销按钮是最常用的做法,但如果出于某种原因需要用户在浏览器关闭时注销,则必须在客户端实现某些功能,因为浏览器关闭时不会向服务器发送任何信号。
如果您担心安全问题 - 即您正在编写高度安全的应用程序(如支付网关),您可以遵循银行网站或其他支付网关的做法;
当用户返回站点时,他们仍然会登录,但是当他们尝试执行任何会影响登录用户的操作时,请使用其他密码屏幕重新进行身份验证,或者要求提供一些令人难忘的信息。< / p>
答案 1 :(得分:2)
这是一种经典行为,您可以在许多网站上观察它,包括Stack Overflow :) 您的会话变量绑定到浏览器中的cookie。如果您希望在浏览器关闭时真正注销用户,请将会话cookie的时间设置为零。
答案 2 :(得分:2)
当您明确设置Cookie时,您可以选择其过期时间。当您使用session_start()生成会话cookie时,其到期时间由php.ini中的session.cookie_lifetime值确定。如果将此值设置为0,则会在浏览器窗口关闭时会话cookie过期。