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]

-- 
Casey Allen Shobe
[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]

Reply via email to