Question

Alright so I've got a php class called authentication which is setting some cookies in the login method if the person is successfully logged in, then my script in the same method login I am forwarding the user using php's header to the appropriate url. However for some reason the cookies aren't being set.

Here is the class authentication:

<?php

require '../../config.php';
require base .'lib/helpers/bao.php';

class authentication extends bao {

    /*
        Login
    */
    public function login( $email, $pass, $fUrl = null ) {

        // set the forwarding url
        $forward = '/login.php';

        // check for empty values
        if( !empty( $email ) && !empty( $pass ) ) {

            // set params for binding and run query
            $params = array( ':email' => $email );
            $runQuery = parent::query( "SELECT * FROM users WHERE email = :email", $params );

            // check to see if an account was found
            if( parent::numRows( $runQuery ) > 0 ) {

                // place result into array for use
                $result = parent::fetch( $runQuery );

                // check to see if passwords match
                if( $result['pword'] === sha1( $result['salt'] . $pass ) ) {

                    // update login in time in the database
                    $params = array(':login' => expLogin, ':id' => $result['id'] );
                    $updateLoggedin = parent::query( "UPDATE users SET login = :login WHERE id = :id", $params );

                    // Set a bunch of cookies
                    setcookie("userId", $result['id'], expLogin, '/');
                    $emailCookie = setcookie("userEmail", $result['email'], expLogin, '/');
                    setcookie("userNotifications", base64_encode( $result['email'] ), expLogin, '/');
                    setcookie("userType", $result['type'], expLogin, '/');
                    setcookie("userStatus", $result['status'], expLogin, '/');
                    setcookie("userLogin", $result['login'], expLogin, '/');

                    // set forwarding url
                    switch( $result['type'] ) {
                        case 'obl':
                            $forward = $fUrl ? $fUrl : '/admin/';
                        break;

                        case 'broker':
                            $forward = $fUrl ? $fUrl : '/admin/';
                        break;

                        case 'borrower':
                            $forward = $fUrl ? $fUrl : '/admin/';
                        break;
                    }

                    $processMeta = 'Congrats you are logged in!';

                } else {

                    $processMeta = 'Your passwords did not match, please try again!';

                }

            } else {

                $processMeta = 'I\'m sorry we could not locate your account';

            }

        } else {
            $processMeta = 'You did not enter one of the required fields please try again!';
        }

        // set process message to session
        $_SESSION['processMeta'] = $processMeta;

        // forward onto next url
        header("Location: ". $forward );

    }

}

?>

Now I've used this method many times however the only difference was that before I was programming the code procedurally and now I've put the same code into a class. After being put into the class using the same syntax for the most part the cookies are not setting properly. Any help would be greatly appreciated!

Thanks

Was it helpful?

Solution

I see you are using expLogin as expire time for the cookie. If it is a constant, you should verify its value, the amount of seconds. If expLogin (maybe a typo for $expLogin?) is not defined, php will think it is a string and when casting into an integer, its value is 0.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top