2010-01-14 45 views
1

我目前在我的网站中使用cookie,我做的第一件事就是检查用户是否有cookie,如果他们不显示菜单,如果他们点击3个选项它创建一个cookie,但如果然后退出浏览器中的cookie被破坏,这里是我的代码,当浏览器退出时,Cookie被破坏

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'); 
    } 
} 

基本上指数()函数检查和的createCookie创建一个新的cookie,任何人可以看到任何问题?

+1

您应该使用'uniqid()'而不是创建自己的,较慢的'createrandomid()'函数。 – ryeguy 2010-01-14 15:13:29

回答

1

在你createCookie的功能,调用setCookie方法不会值立即添加到$ _COOKIE超全局 - 这阵只持有目前cookie时提出请求(但你可以存储新的cookie值)

此外,如果您希望在浏览器退出时销毁会话cookie,请将过期时间指定为null。另外,只需使用PHP的内置会话。

1

您需要将setcookie($ path)的第四个参数设置为您网站的绝对路径。例如:

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