1

我正在使用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”。

有人可以帮助我吗?!

4

3 回答 3

2

要为整个站点设置一个全局 cookie,路径应该是不带点的“/”。

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

“./”表示当前目录。

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

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

要删除全局 cookie:

setcookie("lang",'', 1,  "/"); 

关于您的实际问题,“删除所有具有相同名称和不同路径的 cookie”,没有官方记录的方法可以做到这一点。有一个 hack 使用 $_SERVER['HTTP_COOKIE'] 变量,就像这里一样。但是这个变量没有记录,在某些服务器上可能不存在。

于 2018-05-07T11:18:57.340 回答
0

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

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

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

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

小路

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

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

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

我希望这有帮助。

于 2013-02-25T18:05:33.667 回答
0

Codeigniter 有一种删除 cookie 的方法

delete_cookie()

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

delete_cookie("name");

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

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

使用此功能,您可以删除任何路径或域的 cookie。也许您需要多次编写此函数,因为您拥有的“域/路径”

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

于 2013-02-25T18:02:44.937 回答