Reputation: 43
i'm using codeigniter and i have all the routes like this
www.example.com/path1/
www.example.com/path1/path_/
In every page i do a control if SESSION['lang'] is set. if it's set I also set the Cookie
setcookie("lang", $_SESSION["LANG"], time() + (60* 60 * 24 * 30 *12 *20), "./");
But i have a problem... when I do Logout from admin area I must delete the session and also the cookie. But if i Delete a cookie in this way
setcookie("lang",'', time() - (60* 60 * 24 * 30 *12 *20), "./");
it will delete only one cookie lang. I must delete all cookie "lang" of different path.
Someone can help me?!
Upvotes: 1
Views: 4079
Reputation: 461
To set a global cookie for the entire site the path should be "/" without the dot.
"/" means the root of the website.
"./" means current directory.
In your case to set the global cookie it should be:
setcookie("lang", $_SESSION["LANG"], time() + (60* 60 * 24 * 30 *12 *20), "/");
To delete the global cookie:
setcookie("lang",'', 1, "/");
Regarding your actual question, "Delete all cookie with same name and different path" there is no official documented way to do it. There is a hack using the $_SERVER['HTTP_COOKIE'] variable like here. But this variable is not documented and could be non existent on some servers.
Upvotes: 2
Reputation: 5230
Codeigniter has a method to delete cookies
delete_cookie()
Lets you delete a cookie. Unless you've set a custom path or other values, only the name of the cookie is needed:
delete_cookie("name");
This function is otherwise identical to set_cookie(), except that it does not have the value and expiration parameters. You can submit an array of values in the first parameter or you can set discrete parameters.
delete_cookie($name, $domain, $path, $prefix)
With this function you can delete the cookie of any path or domain. Perhaps you need to write this function so many times as "domain/path" you have
http://ellislab.com/codeigniter/user-guide/helpers/cookie_helper.html
Upvotes: 0
Reputation:
The way which you use to set a cookie stores a separate cookie for each page/URL that you visit because:
setcookie(..., ..., ..., "./"); // the 4th parameter means "this directory"
So if the script get executed on every page then every directory and subdirectory that you visit will get a separate cookie. However, this is not necessary if you want to set the "lang" parameter for a whole part of the domain.
If you change it to something like "/foo/" then this cookie will be valid for any http://www.example.com/foo/ and any subdirectory of www.example.com/foo/, see http://php.net/manual/en/function.setcookie.php:
Path
The path on the server in which the cookie will be available on. If set to '/', the cookie will be available within the entire domain. If set to '/foo/', the cookie will only be available within the /foo/ directory and all sub-directories such as /foo/bar/ of domain. The default value is the current directory that the cookie is being set in.
Because this will store only one cookie for the whole part of the domain, you can easily invalidate it using your code with the 4th parameter changed:
setcookie(..., ..., ..., "/foo/");
I hope this helps.
Upvotes: 0