Pergunta

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

Foi útil?

Solução

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top