views:

230

answers:

1
+1  Q: 

Cookie not saving

On my site the user is greeted with a yes/no menu what determines whether they see it, is this peiece of code.

if(!isset($_COOKIE['bangUser'])) {
            // Get createRandomId() method and return a unique ID for the user
            $unique = '';
            // Setting the cookie, name = bangUser, the cookie will expire after 30 days
            setcookie("bangUser", $unique, time() + (60*60*24*30));
            $data['firstTime'] = TRUE;
        } else {
            $data['notFirstTime'] = TRUE;
        }

If the user clicks yes then this run

function createCookie() {
        // Function gets called when the user clicks yes on the firstTime menu.
        // The purpose of this function is to create a cookie for the user.
        // First we'll give them a unique ID
        $unique = $this->createRandomId();
        // Set an expiration time
        $expireAt = time() + (60*60*24*30);
        // With the unique ID now available we can set our cookie doing the same function as before
        $_COOKIE[] = setcookie("bangUser", $unique, $expireAt);
        // Now that the cookie is set we can do a 100% check, check that cookie is set and if it is redirect to
        // to the homepage
        if(isset($_COOKIE['bangUser'])) {
            // We need to save the cookie data to the database
            // First let's load the model for the cookies
            $this->load->model('cookieModel');
            $this->cookieModel->saveCookieRecord($unique, $expireAt);
            redirect('/welcome');
        }
    }

if no this code is run,

 function createCookieLater() {
            // Function gets called when the user clicks yes on the firstTime menu.
            // The of this function is create a cookie for the user, but this time it,
            // It will expire when the user closes the window.
            // Again we give them an ID
            $unique = $this->createRandomId();
            $_COOKIE[] = setcookie("bangUser", $unique, 0);
            // Now that we have set the cookie, we again need to check that it is properly set,
            // and if it we can redirect the user back to the main page, again.
            if(isset($_COOKIE['bangUser'])) {
                // We need to save the cookie data to the database
                // First let's load the model for the cookies
                $this->load->model('cookieModel');
                $this->cookieModel->saveCookieRecord($unique, $expireAt);
                redirect('/welcome');
            }
        } 

hope some can help me

+3  A: 

You should really specify the domain when storing cookies:

setcookie("bangUser", $unique, time() + (60*60*24*30));

should become:

setcookie("bangUser", $unique, time() + (60*60*24*30), '/', '.yourdomain.com');

I'm pretty sure this is your issue.

cballou
+1 Well, more the path than the domain, I would say. (The current path will be used if the path is not set).
Pekka
Thanks cballou and Pekka
sico87