我正在使用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”。
有人可以帮助我吗?!
答案 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/");
我希望这会有所帮助。