Set cookie in sub folder in PHP - php

I have one domain as www.test.com and I have one folder in this domain named "test1".
I am able to create and read cookie at www.test.com but unable to create cookie in www.test.com/test1.
I want to set cookie in index.php file of www.test.com/test1.
Please help.
I have tried with following code and many others but its not setting cookie.
setcookie(
"normal_id",
'1',
time() + (10 * 365 * 24 * 60 * 60),
'/'
);

Try this.
setcookie('hogename','hogeval',time()+10000,'/test1'); // name, value, expire, path
http://php.net/manual/en/function.setcookie.php

Related

Cookie set but disappears [duplicate]

This question already has answers here:
Why are my cookies not setting?
(10 answers)
Closed 7 years ago.
Since a few weeks, I notice that my website doesn't save cookie anymore.
If I refresh a few times this page:
<?php
print_r($_COOKIE);
setcookie('Test', 'Blah', time() + 3600 * 24 * 365, '/');
print_r($_COOKIE);
?>
cookies should be there! But I get:
Array ( ) Array ( )
Is there a common way to debug this?
Note: it's not a duplicate from this question, its answers didn't solve the problem.
$_COOKIE contains the cookies that the browser sent in the current request.
setcookie puts an instruction in the response that tells the browser to store a cookie.
The browser won't send that cookie back to the server until the next request.
If you want to test if a cookie is set you can:
Look at the response headers in your browser's developer tools
Add some JavaScript to the response body that will examine document.cookie
Make a new HTTP request and use server side code to see if it includes the cookie
Set where you want the cookie to be accessible,
setcookie('Test', 'Blah', time() + 3600 * 24 * 365 * 10, "/");
/ means that it is available everywhere on the domain.
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.
Try refresh the page as it doesn't show until next request.
Reading Material
setcookie
try not to save it for 10 years . 1 year is already enough i belive
setcookie('Test', 'Blah', time() + 3600 * 24 * 365, "/");

Why COOKIE return different value both index url and subdirectory domain

I try to using $_COOKIE in php for generating unique visitor ID. I choose $_COOKIE because it is always available as long the time that I want althought the device used by visitor is turn off.
My problem is when I echo COOKIE value with same key it's return different both root domain and subdirectory. Some directory return same value with root domain but some of them return diferent.
Here is the flow :
http://example.com
return same COOKIE value with
http://example.com/cart
but this one return diferent COOKIE value with same key used above
http://example.com/detail/my-product-name-uri
Here is my generating code for the COOKIE
if(!isset($_COOKIE['ID']))
setcookie(
"ID",
uniqid(),
time() + (10 * 365 * 24 * 60 * 60),
'/'
);
I using CODEIGNITER btw and generating COOKIE in index.php file int the root.

How to detect cookie in specific domains using $_COOKIE or any other way

Hi guys this is abit similer to a question that i posted earlier. but now i have found the problem which lies behind it...when i set a cookie using my script known as cookieset.php
setcookie("atid", 1234, time() + 60 * 60 * 24 * 365, "/", ".mydomain.com");
and it is shown in the browser
Name atid
Content 1234
domain mydomain.com
in another instance i set a cookie in this way
setcookie('atid', '1234', time() + 60 * 60 * 24 * 365, "/", "localhost");
and it is shown in the browser
Name atid
Content 1234
domain localhost
but when i try to retrieve it like this from another script
echo 'value is: ' . $_COOKIE['atid'];
the correct value is shown only when i create the cookie by giving the domain name as localhost, but when i give, my specific domain name $_COOKIE['atid']; does not detect the cookie but gives the error
undefnied index: atid in.........
can anybody help me to detect the cookie on my domain name
Cookies are stored on client side i.e. on the browser. Also cookies are domain specific, and sub-domains can access the cookies of parent domain.
e.g.: if you have created a cookie for domain test.com then www.test.com, demo.test.com etc can access that cookie.
The reason you're unable to access the cookie with the your domain name is because, probably you have created the cookie using localhost i.e. your second code
setcookie('atid', '1234', time() + 60 * 60 * 24 * 365, "/", "localhost"); and trying to access it from your domain name. remove localhost from above code and then try to access it from your domain name.
use this code:
setcookie('atid', '1234', time() + 60 * 60 * 24 * 365, "/");
Let me know if the issue still persist.

Unable to read cookie in php on localhost

PHP not reading cookie although I can see in browser.
//i set cookie in localhost/site/classes/php/user
setcookie("liu", $result[0]['user_id'], time() + 60 * 60 * 24 * 30, "/");
//trying to access it in localhost/site/index.php
$loggedInUser = $_COOKIE['liu'];
If you're running on localhost, you should explicitly set the cookie domain to false.
You could try:
setcookie("liu", $result[0]['user_id'], time() + 60 * 60 * 24 * 30, "/", false);
Have a further look here: Cookies on localhost with explicit domain
You cannot read a cookie you have set in the code above.
Cookies are sent with the headers to the browser.
PHP will be able to read the cookie only after the user navigates to the next page or you redirect him to a new page.
PHP will be able to read the cookie then because the browser will send it back via headers.
Read this: http://uk1.php.net/manual/en/function.setcookie.php
Common Pitfalls:
Cookies will not become visible until the next loading of a page that the cookie should be visible for. To test if a cookie was successfully set, check for the cookie on a next loading page before the cookie expires.
Expire time is set via the expire parameter. A nice way to debug the existence of cookies is by simply calling print_r($_COOKIE);
We verify that we are not working in local, if we are in local we put the value of false in the variable $domain. If not, we pass the domain where the web is hosted.
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie( 'liu', $result[0]['user_id'], time() + 60 * 60 * 24 * 30, '/', $domain );

Delete all cookie with same name and different path

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?!
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.
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.
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

Categories