我可以选择在我的网站上选择“记住我”选项,将某些信息保存到Cookie中,以便无需登录即可对其进行身份验证。
但是,当用户想要注销时,似乎这些cookie正在被删除,但出于某种原因,当它们被发送到下一页时会再次被创建。
以下是我的注销脚本示例。在调用此确切代码之前,用户通过注销文件中包含的其他文件进行身份验证,如果用户已指定希望记住,则会设置Cookie。
// -- FROM THE AUTH FILE -- //
setcookie("username", "bob240", time() + (86400 * 30), "/", ".domain.com");
setcookie("password", "password123", time() + (86400 * 30), "/", ".domain.com");
// -- END FROM THE AUTH FILE -- //
// Clear cookies by setting them to a past date.
setcookie("username", "", time() - (86400 * 30), "/", ".domain.com");
setcookie("password", "", time() - (86400 * 30), "/", ".domain.com");
// Check if the session was destroyed.
if(session_destroy()) {
// Redirect the user.
header('Location: /next/page/'); die("Redirecting...");
}
这意味着在同一页面上设置两次相同的Cookie。但是,因为这些cookie是按照列出的顺序设置的,所以不应该有任何冲突。
但是,为了测试这个理论,我跟踪了浏览器的标头请求和响应,我可以看到当用户进行身份验证并在用户注销时删除了cookie。
为了进一步检查,我在注销页面和用户被重定向到的页面上多次打印$ _SESSION和$ _COOKIE。我可以看到饼干被删除了,因为$ _COOKIE是空的。但是,$ _SESSION仍包含验证用户身份的必要信息。因此,我认为会议以某种方式引起了问题。但是,当我测试退出而没有从“记住我”选项设置cookie时,我抛弃了这个想法,一切正常。
我还想注意,当从子域访问注销页面时,从sub-domain.domain.com - > www.domain.com/log-out-page/,即使设置了cookie,我也能成功注销。
我也可以在多次访问退出页面后成功注销。
我在另外两个站点上使用相同的代码(AFAIK),这两个站点都位于相同的Web服务器上,一切正常。我甚至尝试使用其他两个站点的文件,但问题仍然存在。所有这些网站都使用CloudFlare并具有相同的设置。
由于这是一个非常模糊的问题,您可以使用我网站上的模拟账户自行登录并测试任何内容。
无法使用的网站:https://theartex.net/system/login/, 工作的网站:https://mathhulk.me/system/login/
账户 用户名 - 演示, 密码 - 演示
答案 0 :(得分:2)
/cloud/api/
为用户获取警报的持续ping操作会在/system/logout
删除Cookie的同时设置Cookie。如果你不让/cloud/api
设置两个cookie,那么它应该全部工作了。