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

时间:2013-02-25 17:34:23

标签: 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),  "./"); 

但我有一个问题...... 当我从管理区域注销时,我必须删除会话以及cookie。 但如果我以这种方式删除cookie

setcookie("lang",'', time() - (60* 60 * 24 * 30 *12 *20),  "./"); 

它只删除一个cookie lang。 我必须删除不同路径的所有cookie“lang”。

有人可以帮助我吗?!

3 个答案:

答案 0 :(得分:1)

要为整个网站设置全局Cookie,路径应为“/”,不带点。

“/”表示网站的根目录。

“./”表示当前目录。

在你的情况下,设置全局cookie应该是:

\S

要删除全局Cookie:

setcookie("lang", $_SESSION["LANG"], time() + (60* 60 * 24 * 30 *12 *20),  "/");

关于您的实际问题,“删除所有具有相同名称和不同路径的cookie”,没有官方记录的方法来执行此操作。有一个hack使用$ _SERVER ['HTTP_COOKIE']变量,如here。 但是这个变量没有记录,可能在某些服务器上不存在。

答案 1 :(得分:0)

Codeigniter有一种删除cookie的方法

delete_cookie()

允许您删除Cookie。除非您设置了自定义路径或其他值,否则只需要Cookie的名称:

delete_cookie("name");

此函数与set_cookie()完全相同,只是它没有value和expiration参数。您可以在第一个参数中提交值数组,也可以设置离散参数。

delete_cookie($name, $domain, $path, $prefix)

使用此功能,您可以删除任何路径或域的cookie。也许你需要多次编写这个函数" domain / path"你有

http://ellislab.com/codeigniter/user-guide/helpers/cookie_helper.html

答案 2 :(得分:0)

您使用设置Cookie的方式为您访问的每个网页/网址存储单独的Cookie,因为:

setcookie(..., ..., ..., "./"); // the 4th parameter means "this directory"

因此,如果脚本在每个页面上执行,那么您访问的每个目录和子目录都将获得一个单独的cookie。但是,如果要为域的整个部分设置“lang”参数,则不需要这样做。

如果您将其更改为“/ foo /”,则此Cookie将对www.example.com/foo/的任何http://www.example.com/foo/和任何子目录有效,请参阅http://php.net/manual/en/function.setcookie.php

  

<强>路径

     

可在其上使用cookie的服务器上的路径。如果   设置为'/',cookie将在整个域中可用。如果   设置为'/ foo /',Cookie只能在 / foo /中使用   目录和所有子目录,例如/ foo / bar / of domain 。该   默认值是正在设置cookie的当前目录   英寸

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

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

我希望这会有所帮助。