php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #13116 setcookie would not work when expire is set
Submitted: 2001-09-03 16:33 UTC Modified: 2002-03-08 00:00 UTC
Votes:23
Avg. Score:4.7 ± 0.6
Reproduced:20 of 22 (90.9%)
Same Version:10 (50.0%)
Same OS:12 (60.0%)
From: gotenforward at yahoo dot com Assigned:
Status: No Feedback Package: HTTP related
PHP Version: 4.0.6 OS: FreeBSD 4.3
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: gotenforward at yahoo dot com
New email:
PHP Version: OS:

 

 [2001-09-03 16:33 UTC] gotenforward at yahoo dot com
I pretty much get the same error as this link

http://www.php.net/bugs.php?id=11478&edit=1

Over a couple hundreds of users, all of them works fine with IE 5.0+  However, some of the user can not login due to the cookie is not set.

Whenever I do

setcookie("username",$user,time()+3600,"/",".domain.com");

Some of the users using IE would not get the cookie.

But when i just change it to 

setcookie("username",$user,"","/",".domain.com");

It works.  But not setting expire time will not write the cookie to harddisk, it just stored into memory, which is not what I want.

So, I tried to use the header function and see if that helps.

$time = mktime()+ $config[cookieTTL]; 
$date = gmdate("l, d-M-Y H:i:s", ($time)); 
header("Set-Cookie: $cookiename=$tmpstring; expires=$date GMT; path=/;");

IE still do not pick up the cookie.


Here is a little function I use to store cookie

function putCookie($config,$cookiename, $varname, $data, $send="") { 

// function to store cookie, use serialize() to bypass the limit of using 20 cookies per domain. 
// And make it easier to add new cookie later.

	//keep this array always static so that when we get out of this function, it still keep the variable.
	static $tmpArray; 
	
	$tmpArray[$varname] = $data;
		
	if ($send != "") {
		$tmpstring = serialize($tmpArray); 
		$tmpstring = base64_encode($tmpstring);
	
		$time = mktime()+ $config[cookieTTL]; 
		$date = gmdate("l, d-M-Y H:i:s", ($time)); 
				
		setCookie($cookiename, $tmpstring, "", $config[cookie_path], $config[CookieURL]); // now we clean the static array after we send the cookie	
		
		unset($tmpstring); 
		$tmpArray = "";
		unset($tmpArray);
	}
}	

 

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-09-03 16:47 UTC] gotenforward at yahoo dot com
Another user experience the same problem like mine

http://www.php.net/bugs.php?id=11492&edit=1

It looks like they are all using FreeBSD
 [2002-02-07 23:05 UTC] shiflett@php.net
Your code works for me, but I don't have a FreeBSD box to test on nor an Internet Explorer browser.

However, let's not assume yet that this is a FreeBSD problem, since that really seems unlikely with such a basic thing. The much more probable case is that it is an IE bug, as IE has historically had problems with adhering to HTTP standards specifically with cookies.

If your problem (as you say) is like the other bug you link to, then it sounds like the problem lies in the browser not returning the cookie rather than the cookie not being set.

To help investigate this, please check as many of the following things as you know how:

1) HTTP response your PHP page generates
2) subsequent HTTP request from the browser (meaning, a request after the cookie has been set)
3) Time (in GMT) on the browser
4) Time (in GMT) on the server
5) URL being used to access the page
6) Domain being used to set the cookie

If the problem doesn't reveal itself after inspecting these things, use the header function as you did but with all hardcoded values to make sure you're setting the cookie you think you are and that the date is sufficiently far in the future to rule out any time synchronization problems.

Thanks for your help!

Chris
 [2002-03-08 00:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 [2007-04-10 11:34 UTC] senglathsamy at laodev dot com
I also have problem as  above posted.
my script can not work on FC6 server but it's work well on Win Server

1 test:

setcookie("use","value"); // I can call cookie based on both win and linux server

2 test:

setcookie("use","value",time()+3600); // I can call cookie based on win only, But can't call cookie linux server

so, help me to fix this bug, Plz!
 [2007-04-26 00:15 UTC] aziz at azizce dot com
[quote = "senglathsamy at laodev dot com"]


//I also have problem as  above posted.
//my script can not work on FC6 server but it's work well on Win Server

//1 test:

//setcookie("use","value"); // I can call cookie based on both win and
//linux server

//2 test:

//setcookie("use","value",time()+3600); // I can call cookie based on //win
//only, But can't call cookie linux server

//so, help me to fix this bug, Plz!
[/quote]

I was had same problem too. Now it was resolved. (Thanks for help Hannes)

shiflett said on 7 Feb 2002 ;

3) Time (in GMT) on the browser
4) Time (in GMT) on the server

And I say that's your solution. Compare your computer time(in GMT) with your remote server time (in GMT) .You'll see that probably times are different...

Regards...
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Wed May 29 08:01:32 2024 UTC