如何在客户端计算机上删除PHPSESSID
问题更新:如何在客户端计算机上删除PHPSESSID,php,session,Php,Session,问题更新: 在某些浏览器上,我们有两个phpsessid 我在脚本的任何地方都没有设置一个PHPSESSID 它的主机(而不是我设置的PHPSESSID的域)为www.mywebsite.com 我尝试使用setcookie删除它:setcookie(“PHPSESSID”,$\u COOKIE['PHPSESSID',time()-864000',/','www.mywebsite.com')但这失败了 尝试使用以下方法删除cookie:setcookie(“PHPSESSID”,$_coo
- 在某些浏览器上,我们有两个phpsessid
- 我在脚本的任何地方都没有设置一个PHPSESSID
- 它的主机(而不是我设置的PHPSESSID的域)为www.mywebsite.com
- 我尝试使用setcookie删除它:
setcookie(“PHPSESSID”,$\u COOKIE['PHPSESSID',time()-864000',/','www.mywebsite.com')代码>但这失败了
- 尝试使用以下方法删除cookie:
setcookie(“PHPSESSID”,$_cookie['PHPSESSID',time()-864000',/)代码>导致PHPSESSID I集被删除
- 我已尝试使用
重命名我设置的会话。这可以正常工作,但几分钟后服务器分别崩溃session\u name
- 我别无选择
我正在我的网站上使用PHP会话 会话路径是/folder,后来我改为/folder以适应新的用途 现在,老用户无法登录 现在,他们的浏览器上似乎存储了两个phpsessid,一个带有path/folder,另一个是/ 如何确保老用户可以登录,同时确保会话在站点范围内使用“/”进行 更多信息 当我说两个phpsessionid时,请参考图片
session\u set\u cookie\u参数(864000,/cv,'.website.com',0,1)代码>
但如果我使用以下方法,则无法工作:
B.session\u set\u cookie\u参数(864000,“/”,“.website.com”,0,1)代码>
- 如果我使用上面的版本2A,则该会话将仅在/cv中可用,而在其他网站文件夹(如/folder)中不可用
关于使用JAVASCRIPT删除PHPSESSID的更新
- 当我运行alert(document.cookie)时,它会显示除PHPSESSID之外的所有cookie
- 因此,删除PHPSESSID cookie的所有尝试都会失败,而其他cookie则可以删除
关于使用PHP删除PHPSESSID的更新
- 当我
var_dump($_COOKIE['PHPSESSID'])代码>返回的是带有路径/cv的PHPSESSID的值
- 尝试使用
setcookie(“PHPSESSID”,“time()-3600”)删除代码>失败
我认为你把事情搞混了,或者你应该更详细地了解你的设置/问题
PHP的会话路径是会话数据存储在服务器上的位置,而不是客户端。请参阅文档:
您可以移动这些文件并替换/保留,以防发生冲突。这几乎只受访问/移动内容时的读/写权限以及Web服务器用户(如apache或nginx)或php用户在新位置读/写内容时的读/写权限的限制
如果“浏览器中的PHPSESSID”是指会话id是URL的一部分,这是一个不同的PHP设置,无论如何都应该禁用,请参阅文档中的注意事项:
根据更新的问题进行编辑:
已经有了一个很好的基于JS的解决方案来终止旧cookie。我会同意的。如果你不能做到这一点,你可以重定向到/cv
,在那里有一个php脚本,读取cookie并将数据存储在某个地方(例如基于用户id的数据库),然后使cookie过期。然后您可以重定向到旧页面,查找“/”cookie并恢复数据。这是一个非常丑陋的攻击,但我不认为您可以在PHP中获得每个路径的cookie,因为它是服务器端的,并且基于客户端提供的会话id(但我可能错了)。我猜您的脚本不知道,在会话启动()时应该访问哪个会话
尝试使用指定会话的正确路径
ini_set('session.cookie_path', '/');
或
取决于您的设置
如果没有帮助,我建议使用它将当前会话id替换为新的会话id,并保留当前会话信息。您必须删除客户端的cookie。这在javascript中是可能的
在您的站点上尝试以下javascript:
<script type="text/javascript">
document.cookie = "PHPSESSID=;Path=/cv;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
</script>
在控制台上,cookie消失了,如下图所示(我使用了表左下角的小刷新按钮,因为在本例中它只是临时的)
在下一次重新加载时,在本例中,我再次获得cookie,因为Mozilla将其返回给我。在您的站点上,您不必再次创建旧的cookie,一切都很好。解决方案是让用户在会话过期期间转到/文件夹路径。在此路径上,使用setcookie函数()生成php脚本,用于将所有cookie从/folder复制到/path
附加说明:Cookie与路径和域相关联,它很重要(默认情况下是/,但在您的情况下似乎不是这样)。因此,无法从父路径访问子路径(如/folder或/me)中的PHPSESSID。它们在父母之间传播。因此,来自/me的cookie与for/with-not-assigned-explicit相同 如果您手动发送带有所需路径的新过期日期的标题,客户端应将其删除
session_start();
header("Set-Cookie:PHPSESSID=".session_id()."; expires=Sat, 07-Nov-1999 14:58:07 GMT; path=/cv/");
第一次,您拥有旧的cookie路径,但从第二页调用时,将仅存储和传输路径/
中的cookie
当您知道客户机是否受到此问题的影响或此问题持续一个月时,您可以发送此标题。我只需从/folder
使cookie过期即可。这将为/
setcookie('PHPSESSID', '', time() - 86400, '/folder/');
您可以在会话_start()之前使用会话_name()更改新会话的cookie名称,并让问题在几天内自行解决
session_name("SESSION_ID");
session_start();
无法删除Cleint浏览器的Cookie
首先,您必须了解,您不能以任何方式删除客户端系统上的COOKIES
。当您的cookie无效时,浏览器不会删除它,但会使cookie无效。cookie仍然在客户端上
session_start();
header("Set-Cookie:PHPSESSID=".session_id()."; expires=Sat, 07-Nov-1999 14:58:07 GMT; path=/cv/");
setcookie('PHPSESSID', '', time() - 86400, '/folder/');
session_name("SESSION_ID");
session_start();
session_start(); // initialize session
session_destroy(); // destroy session
setcookie("PHPSESSID","",time()-3600,"/"); // delete session cookie
document.cookie = "PHPSESSID=; expires=Thu, 01 Jan 1970 00:00:00
UTC;path=/;host=localhost";
count=0;
foreach($_COOKIE as $key => $value){
if ( $key == "PHPSESSID" ){
count++;
}
}
if (count>1){
//Destory all cookies here
foreach($_COOKIE as $key => $value){
setcookie($key,"",time()-3600,"/");
}
//Reload/redirect the current page to dispose of all things
header("Locations:" . $your_url);
exit(0);
}
setcookie('PHPSESSID', '', -3600, '/cv');
setcookie('phpsessid','value',time()-1);
setcookie ("PHPSESSID", "", time() - 3600, '/');