2010-01-14 10 views
1

Je suis actuellement jouer avec les cookies dans mon site, la première chose que je fais est exécuter une vérification pour savoir si l'utilisateur a cookie, s'ils ne j'afficher un menu wth 3 options s'ils cliquent il crée un cookie, mais si puis quittez le navigateur le cookie est détruit, voici mon code,Cookie détruite lorsque le navigateur se ferme

fonction
function createRandomId() { 
    $chars = "abcdefghijkmnopqrstuvwxyz023456789"; 
    srand((double)microtime() * 1000000); 
    $i = 0; 
    $unique = ''; 
    while ($i <= 7) { 
     $num = rand() % 33; 
     $tmp = substr($chars, $num, 1); 
     $unique = $unique.$tmp; 
     $i++; 
    } 
    return md5($unique); 
} 

function index() { 
    // $data is the array of data that is passed to views, setup it up 
    $data = array(); 
    // We need to setup the cookie that will be used site, this will be used to cross reference 
    // The user with the options they have selected, to do this we first need to load the session model 
    // Check if the user has a cookie already, if they it means they have been to the site in the last 30 days. 
    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; 
    } 

    // Load the view and send the data from it. 
    $this->load->view('base/index', $data); 
} 


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(); 
    // With the unique ID now available we can set our cookie doing the same function as before 
    setcookie("bangUser", $unique, time() + (60*60*24*30)); 
    // 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'])) { 
     redirect('welcome'); 
    } 
} 

Fondamentalement, l'indice() effectue la vérification et l'createCookie crée un nouveau cookie, peut-on voir tout problèmes?

+1

Vous devriez simplement utiliser 'uniqid()' au lieu de créer votre propre fonction 'createrandomid()' plus lente. – ryeguy

Répondre

1

Dans votre fonction createCookie, appelant setCookie n'ajoutera immédiatement la valeur à la _COOKIE superglobal $ - ce tableau ne contient que les témoins présents lorsque la demande a été faite (mais vous pouvez stocker votre nouvelle valeur du cookie dans le tableau de toute façon)

en outre, si vous voulez un cookie de session qui est détruit lorsque le navigateur se ferme, spécifiez null pour l'heure d'expiration. Sinon, utilisez simplement les sessions intégrées de PHP.

1

Vous devez définir le quatrième paramètre de setcookie ($ path) sur le chemin absolu de votre site Web. Par exemple:

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