How is exactly is SetCookie() broken?
Compare your header() call to the same SetCookie() calls and you will see
that yours produces:
Set-Cookie: username=Rasmus; expires=Wed, 12-Dec-2001 21:58:55 GMT; path=/;
domain=www.php.net
Set-Cookie: password=d41d8cd98f00b204e9800998ecf8427e; expires=Wed, 12-Dec-2001
21:58:55 GMT; path=/; domain=www.php.net
Whereas these two calls:
SetCookie('username',$username,time()+1800,'/',$SERVER_ADDR);
SetCookie('password',$password,time()+1800,'/',$SERVER_ADDR);
Produce:
Set-Cookie: username=Rasmus; expires=Wed, 12-Dec-01 21:58:55 GMT; path=/;
domain=www.php.net
Set-Cookie: password=d41d8cd98f00b204e9800998ecf8427e; expires=Wed, 12-Dec-01 21:58:55
GMT; path=/; domain=www.php.net
Putting them side by side to make it easier to compare:
Set-Cookie: username=Rasmus; expires=Wed, 12-Dec-2001 21:58:55 GMT; path=/;
domain=www.php.net
Set-Cookie: username=Rasmus; expires=Wed, 12-Dec-01 21:58:55 GMT; path=/;
domain=www.php.net
They are identical except for the PHP SetCookie() version using a 2-digit
year (which can be changed in your php.ini file with the y2k directive).
So if PHP's SetCookie() is broken, then your Header() calls is just as
broken.
-Rasmus
On Wed, 12 Dec 2001, Casey Allen Shobe wrote:
> Mine's working great.
> setcookie() is broken pretty badly though...so I use header instead...here's
> my whole authentication system. I home that it will be of use to you. This
> works in every browser that supports cookies. I've tested NN6-6.2, NN4.77,
> IE5.0-6.0, and Konqueror 2.2.1.
>
> <?php
>
> if ($pagetype == null) {
> $pagetype = 'login';
> }
>
> // (This is for a 30 minute cookie)
> if ($pagetype == 'dologin') {
> if (($username != null) and ($password != null)) {
> $time = mktime()+1800;
> $date = gmdate("D, d-M-Y H:i:s", ($time));
> $password = md5 ($password);
> header ('Set-Cookie: username='.$username.'; expires='.$date.' GMT;
>path=/;
> domain='.$SERVER_ADDR);
> header ('Set-Cookie: password='.$password.'; expires='.$date.' GMT;
>path=/;
> domain='.$SERVER_ADDR);
> header ('Refresh: 1; url='.$PHP_SELF.'?pagetype=home');
> print 'One moment, logging on...'."\n";
> } else {
> $pagetype = 'login';
> $message = 'nopass';
> }
> }
>
> if ($pagetype == 'dologoff') {
> $time = mktime()-1800;
> $date = gmdate("D, d-M-Y H:i:s", ($time));
> header ('Set-Cookie: username='.$username.'; expires='.$date.' GMT; path=/;
> domain='.$SERVER_ADDR);
> header ('Set-Cookie: password='.$password.'; expires='.$date.' GMT; path=/;
> domain='.$SERVER_ADDR);
>
> $pagetype = 'login';
> }
>
> // If you want to make sure the user doesn't forge their cookie timeout to a
> // longer time, you can also write a lastlogin timestamp into a database or
> // local file, and double-check against that, using the server time.
>
> // You could also even write a isloggedon value to a database to verify that
> // once a user logs off, they are *really* logged off by making it also
> // challenge that.
>
> // This is my authentication check...yours will differ.
> if (($pagetype != 'login') and ($pagetype != 'dologin') and ($pagetype !=
> 'dologoff')) {
> if (($username != null) and ($password != null)) {
> $db_userinfo = db_query ($db2_conn, 'select * from gabrielle_users
>where
> username=\''.$username.'\'');
> $db_password = $db_userinfo[0][0][2];
> $input_password = $password;
> if ($password != $db_password) {
> $pagetype = 'login';
> $message = 'badpass';
> } else {
> $acl = $db_userinfo[0][0][3];
> }
> } else {
> $pagetype = 'login';
> $message = 'expire';
> }
> }
>
> // Updates the cookie on every pageload. You probably want this.
> if (($pagetype != 'login') and ($pagetype != 'dologin') and ($pagetype !=
> 'dologoff') and ($pagetype != 'dochangepass')) {
> $time = mktime()+1800;
> $date = gmdate("D, d-M-Y H:i:s", ($time));
> header ('Set-Cookie: username='.$username.'; expires='.$date.' GMT; path=/;
> domain='.$SERVER_ADDR);
> header ('Set-Cookie: password='.$password.'; expires='.$date.' GMT; path=/;
> domain='.$SERVER_ADDR);
> }
>
> if ($pagetype == 'login') {
> $time = mktime()-1800;
> $date = gmdate("D, d-M-Y H:i:s", ($time));
> header ('Set-Cookie: username='.$username.'; expires='.$date.' GMT; path=/;
> domain='.$SERVER_ADDR);
> header ('Set-Cookie: password='.$password.'; expires='.$date.' GMT; path=/;
> domain='.$SERVER_ADDR);
> // Replace this with whatever you do to generate a login page.
> render_page ('login', $message, 0, 0, $gabrielle_version, $SERVER_PORT,
> $SERVER_ADDR, 0, 0, 0, $HTTP_SERVER_VARS["SERVER_PORT"],
> $HTTP_SERVER_VARS["SERVER_NAME"], $PHP_SELF);
> }
>
> if ($pagetype == 'home') {
> // Replace this with others.
> render_page ('home', $message, $username, $acl, $gabrielle_version, 0, 0, 0,
> 0, 0, $HTTP_SERVER_VARS["SERVER_PORT"], $HTTP_SERVER_VARS["SERVER_NAME"],
> $PHP_SELF);
> }
>
> // Add more sections here for additional pagetypes.
>
> ?>
>
> On Wednesday 12 December 2001 15:16, Steve Osborne wrote:
> > Still trying to get the cookie to work in my site for automatic login
> > capabilities. It has it's moments of greatness, before fading into the
> > shadows again. Most recently, I downloaded Netscape 6.2.1 to test my site,
> > and when I did not allow the password manager to save my login, it has
> > since refused to allow my cookie to be set, even when I unblocked cookies
> > for the site in the Netscape preferences. So, in light of that, I tried to
> > set the cookie on a page in the directory above the login page, in hopes
> > that I could get around the Netscape problem, and, of course, this stopped
> > IE 6 from reading the cookie. Now, neither browser is working correctly.
> > I am already resigned to the fact that I will not try to support users of
> > versions 4 and below in regards to cookies, however I do need to get the
> > more recent versions working.
> >
> > Is it true that when you set a cookie, it is valid only in that directory
> > or domain?
> > Will it be retrieved in subfolders of that directory?
> > Do I require special code to allow it to be accessed in subfolders?
> >
> > Steve Osborne
> > Database Programmer
> > Chinook Multimedia Inc.
> > [EMAIL PROTECTED]
>
>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]