Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除具有相同名称和不同路径的所有cookie_Php_Codeigniter_Cookies - Fatal编程技术网

Php 删除具有相同名称和不同路径的所有cookie

Php 删除具有相同名称和不同路径的所有cookie,php,codeigniter,cookies,Php,Codeigniter,Cookies,我用的是codeigniter,我有所有这样的路线 www.example.com/path1/ www.example.com/path1/path_/ 如果设置了SESSION['lang',则在每个页面中我都执行一个控件。 如果设置了,我也会设置Cookie setcookie("lang", $_SESSION["LANG"], time() + (60* 60 * 24 * 30 *12 *20), "./"); 但是我有个问题。。。 当我从管理区注销时,我必须删除会话和c

我用的是codeigniter,我有所有这样的路线

 www.example.com/path1/
 www.example.com/path1/path_/
如果设置了SESSION['lang',则在每个页面中我都执行一个控件。 如果设置了,我也会设置Cookie

setcookie("lang", $_SESSION["LANG"], time() + (60* 60 * 24 * 30 *12 *20),  "./"); 
但是我有个问题。。。 当我从管理区注销时,我必须删除会话和cookie。 但是如果我以这种方式删除cookie

setcookie("lang",'', time() - (60* 60 * 24 * 30 *12 *20),  "./"); 
它将只删除一个cookie lang。 我必须删除不同路径的所有cookie“lang”


有人能帮我吗

Codeigniter有一种删除cookie的方法

delete_cookie()
用于删除cookie。除非设置了自定义路径或其他值,否则只需要cookie的名称:

delete_cookie("name");
此函数在其他方面与set_cookie()相同,只是它没有值和过期参数。您可以在第一个参数中提交一个值数组,也可以设置离散参数

delete_cookie($name, $domain, $path, $prefix)
使用此功能,您可以删除任何路径或域的cookie。也许您需要多次编写这个函数,就像编写“域/路径”一样


设置cookie的方法为您访问的每个页面/URL存储单独的cookie,因为:

setcookie(..., ..., ..., "./"); // the 4th parameter means "this directory"
因此,如果脚本在每个页面上执行,那么您访问的每个目录和子目录都将获得一个单独的cookie。但是,如果要为整个域设置“lang”参数,则不需要这样做

如果将其更改为“/foo/”之类的内容,则此cookie将对www.example.com/foo/的任何子目录有效,请参阅:

路径

服务器上的路径,cookie将在其中可用。如果 设置为“/”,cookie将在整个域中可用。如果 设置为'/foo/',cookie将仅在/foo中可用/ 目录和域的所有子目录,如/foo/bar/。这个 默认值是正在设置cookie的当前目录 在

因为这将只为整个域存储一个cookie,所以您可以使用更改了第4个参数的代码轻松地使其无效:

setcookie(..., ..., ...,  "/foo/"); 

我希望这会有所帮助。

要为整个站点设置全局cookie,路径应为“/”而不带点

“/”是指网站的根目录

“/”指当前目录

在您的情况下,要设置全局cookie,它应该是:

setcookie("lang", $_SESSION["LANG"], time() + (60* 60 * 24 * 30 *12 *20),  "/");
要删除全局cookie,请执行以下操作:

setcookie("lang",'', 1,  "/"); 
关于您的实际问题,“删除所有具有相同名称和不同路径的cookie”,没有正式的文档记录方法。使用$\u SERVER['HTTP\u COOKIE']变量进行黑客攻击,如。
但是这个变量没有文档记录,在某些服务器上可能不存在。

您需要设置这么多cookie的原因是什么?您已经在使用会话,为什么您不能将这些数据存储在那里?是的…因为当用户关闭web浏览器时,我想记住最后选择的语言…还因为我的应用程序不使用用户名和密码进行身份验证,但只使用cookie设置身份验证…如果有cookie,我必须设置相对会话,并且在我仅使用此会话之后,您似乎只需要需要一个路径为“/”的cookie集。实际上,在一个请求中可以发送多少cookie数据是有限制的。是的。。。但是,如果我在www.example.com/path/中设置cookie,以这种方式设置cookie(“lang”,“$”会话[“lang”),time()+(60*60*24*30*12*20),“/”;当我去查看Chrome信息时,cookie的路径设置为/path/我需要知道如何为我的域或父路径只设置一个cookie名称谢谢Tom。。。我知道如何使用cookie…但我不明白如何为我的域只设置一个cookie…例如,我在www.ex.com/path1/path中,我只想在www.ex.com中设置cookie。。。