如何在客户端计算机上删除 PHPSESSID

2022-08-30 15:20:09

问题更新:

  • 在某些浏览器上,我们有两个 PHPSESSID。
  • 一个PHPSESSID不是由我在我的脚本中的任何位置设置的
  • 它具有HOST(而不是我设置的PHPSESSID的DOMAIN)作为 www.mywebsite.com
  • 我尝试使用setcookie删除它:但这失败了。setcookie ("PHPSESSID", $_COOKIE['PHPSESSID'], time() - 864000, '/', 'www.mywebsite.com');
  • 尝试使用以下命令删除 Cookie 会导致我设置的 PHPSESSID 被删除。setcookie ("PHPSESSID", $_COOKIE['PHPSESSID'], time() - 864000, '/');
  • 我已尝试 使用 重命名我设置的会话。这有效,但几分钟后使我的服务器崩溃了几次。session_name
  • 我没有选择。

我正在我的网站上使用PHP会话。

会话路径是 /folder,后来我更改为 / 以适应新的目的。

现在,老用户无法登录。

似乎他们现在有两个PHPSESSID存储在他们的浏览器上 - 一个带有路径/文件夹,另一个带有/。

我能做些什么来确保老用户可以登录,同时确保会话是全站范围的“/”。

更多信息

当我说两个phpsessionid时,参考图像

the two PHPSESSID

  1. 如果我使用,登录名有效

一个。session_set_cookie_params(864000, '/cv', '.website.com', 0, 1);

但是如果我使用:

B.session_set_cookie_params(864000, '/', '.website.com', 0, 1);

  • 如果我使用上面的版本2A,则该会话将仅在/cv中可用,而在其他网站文件夹中不可用, 例如。/文件夹。

使用JAVASCRIPT删除PHPSESSID的更新

  • 当我运行 alert(document.cookie) 时,它会显示除 PHPSESSID 之外的所有 cookie。
  • 因此,所有删除 PHPSESSID Cookie 的尝试都会失败,而其他 Cookie 可以被删除。

使用 PHP 删除 PHPSESSID 的更新

  • 当我返回的是带有路径 /cv 的 PHPSESSID 的值时var_dump($_COOKIE['PHPSESSID']);
  • 尝试删除 失败。setcookie ("PHPSESSID", "", time() - 3600);

答案 1

我认为您正在混淆事情,或者您应该更详细地了解您的设置/问题。

PHP 的会话路径是会话数据存储在服务器上的位置,而不是客户端。请参阅文档:https://secure.php.net/manual/en/session.configuration.php#ini.session.save-path

您可以移动这些文件,并在发生碰撞时替换/保留您认为合适的方式。这几乎只受您在访问/移动内容时拥有的读/写权限的限制,以及您的Web服务器用户(例如apache或nginx)或php用户从/写入新位置的读/写权限。

如果“PHPSESSID在其浏览器中”的意思是会话ID是URL的一部分,这是一个不同的PHP设置,无论如何都应该被禁用,请参阅文档中的通知:https://secure.php.net/manual/en/session.configuration.php#ini.session.use-trans-sid

根据您更新的问题进行编辑:

已经有一个很好的基于JS的解决方案来使旧cookie过期。我会同意的。如果你不能这样做,你可以做一个重定向,在那里有一个php脚本,读取cookie并将数据存储在某个地方(例如基于user_id的数据库)并使cookie过期。然后,您可以重定向到旧页面,查找“/”-cookie并恢复数据。这是一个非常丑陋的黑客攻击,但我不认为你可以在PHP中获得每个路径的cookie,因为它是服务器端,并且基于客户端提供的会话ID(但我可能是错的)。/cv


答案 2

我会简单地从中过期饼干。这应该只留下一个会话cookie/folder/

setcookie('PHPSESSID', '', time() - 86400, '/folder/');

推荐