2013-07-01 76 views
0

我即将控制我的页面内容。所以我需要添加或删除会话/ cookie。我制作了一个工作正常的类,但是在cookie问题上,它不能很好地工作。我检查了Windows7中的firefox 18,以及Ubuntu 12.04 LTS。饼干使用不会被删除PHP删除php中的cookie

 setcookie(name, '', time()-9600) 



     foreach($this->_ck as $cookie) 
     { 

     $hrs=0; 
      if($plus) 
      { 
     $hrs=3600*$cfg_cookie_time; 
      } 
      //setcookie('testcookie13', '', time()-3600*6); 

     header("Set-Cookie: ".$cookie."=deleted; expires=Sun, 01-Jul-2012 08:59:12 GMT;"); 
     } 

等等

我的班级:

<?php 

class headers{ 
    var $new; 
    var $vars; 
    var $ss; 
    var $ck; 
    var $_ss; 
    var $_ck; 
    var $error; 
    var $catchs; 

    function _construct() 
    { 
     $this->new=false; 
     $this->error=false; 
     $this->ss=array(); 
     $this->ck=array(); 
     $this->_ss=array(); 
     $this->_ck=array(); 
     $this->catchs=true; 
    return $this->catchs; 
    } //f 
    function headers($hs = array(
    "set" => array(
     "ss" => array(), 
     "ck" => array() 
     ) 
    )) 
    { 

    if(isset($hs['send'])) 
    { 
    $this->new=$hs['send']; 
    $this->catchs=true; 
    } 
    if(is_array($hs['set'])) 
    { 

     if(is_array($hs['set']['ss'])) 
     { 
     $this->ss = $hs['set']['ss']; 
     } 

     if(is_array($hs['set']['ck'])) 
     { 
     $this->ck = $hs['set']['ck']; 
     } 
    } 
    if(is_array($hs['unset'])) 
    { 

     if($hs['unset']['ss']) 
     { 
     $this->_ss = $hs['unset']['ss']; 
     } 

     if(is_array($hs['unset']['ck'])) 
     { 
     $this->_ck = $hs['unset']['ck']; 
     } 
    } 
    return $this->catchs; 
    } //f 

    function send(
    $cfg_cookie_time=6, 
    $plus=true 
    ) 
    { 
    $cookie=''; 
     if(is_array($this->ss)) 
     { 
      session_start(); 
      foreach($this->ss as $session){ 
      $_SESSION['session'] = $session; 
      } 
     } 

     if($this->_ck) 
     { 
foreach ($_COOKIE as $name => $value) { 
    setcookie($name, '', 1); 
} 
     } 
     if($this->ck) 
     { 
      foreach($this->ck as $cookie => $val) 
      { 

      //$this->ck=$cookie.$val; 
      $hrs=0; 
       if($plus) 
       { 
      $hrs=3600*$cfg_cookie_time; 
       } 
      header("Set-Cookie: ".$cookie."=".$val."; path=/; domain=".$_SERVER['HTTP_HOST']."; expires=".gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT;", time()+$hrs)); 
      } 
     } 

     if($this->new) 
     { 
     header("location: ".$this->new); 
     $this->catchs=false; 
     } 

     header("X-Powered-By: PHP ".phpversion()."/FxPHP"); 

     //header("HTTP/1.0 404 Not Found"); 

    return $this->ck; 

    } //f 

} // class 

      setcookie('H', '', -3600); 

/*$hr = new HEADERS(array 
(

    "set" => array 
    (
     "ck"=> array(), 
     "ss"=> array() 
    ), 
    "unset" => array 
    (
     "ck"=> array 
     (
     "H" => "H" 
     ), 
     "ss"=> array() 
    ) 
) 

    ); 
print_r($_COOKIE).print_r($hr->send()); 

/* 
      " f" => "" , 
      " sf" => "", 
      "my"=> "" , 

print_r(getallheaders()); 
print_r(setcookie('sd', 'dsds', 3600*6)); 
*/ 

?> 

你能帮忙吗?

+0

尝试使用'的setcookie(饼干,NULL);'如果不工作,那么它的东西,在你的条件 –

+0

我试过。但不能删除任何cookie。 setcookie('H',null); – user174372

回答

0

试试:

<?php 


function del_cookie($_cookie = array()) 
{ 
    foreach($_cookie as $k => $kv) 
     { 
     setcookie($k, '', time()-3600); 
     } 
     return; 
} 


function add_cookie($_cookie) 
{ 
     foreach($_cookie as $k => $kv) 
     { 
     setcookie($k, $kv, time()+3600*24*6); 
     } 
     return; 
} 


class headers{ 
    var $new; 
    var $vars; 
    var $ss; 
    var $ck; 
    var $_ss; 
    var $_ck; 
    var $_ak; 
    var $_dk; 
    var $error; 
    var $catchs; 

    function _constract() 
    { 
     $this->new=false; 
     $this->error=false; 
     $this->ss=array(); 
     $this->ck=array(); 
     $this->_ss=array(); 
     $this->_ck=array(); 
     $this->catchs=true;    
     $this->_ak = false;    
     $this->_dk = false; 
    return $this->catchs; 
    } //f 
    function headers($hs = array(
    "set" => array(
     "ss" => array(), 
     "ck" => array() 
     ) 
    )) 
    { 

    if(isset($hs['send'])) 
    { 
    $this->new=$hs['send']; 
    $this->catchs=true; 
    } 
    if($hs['set']['ck']['true']) 
    { 
    $this->ck = $hs['set']['ck'];    
    $this->_ak = true; 
    } 

     /*if($hs['unset']['ss']) 
     { 
     $this->_ss = $hs['unset']['ss']; 
     } 
     */ 
    if($hs['unset']['ck']['true']) 
    { 
     $this->_ck = $hs['unset']['ck'];   
     $this->_dk = true;  

    } 
    return $this->catchs; 
    } //f 

    function send(
    $cfg_cookie_time=6, 
    $plus=true 
    ) 
    { 
     if(is_array($this->ss)) 
     { 
      session_start(); 
      foreach($this->ss as $session){ 
      $_SESSION['session'] = $session; 
      } 
     } 

     if($this->_dk) 
     { 
del_cookie($this->_ck); 
     } 
     if($this->_ak) 
     { 
add_cookie($this->ck); 
     } 

     if($this->new) 
     { 
     header("location: ".$this->new); 
     $this->catchs=false; 
     } 

     header("X-Powered-By: PHP ".phpversion()."/FxPHP"); 

     //header("HTTP/1.0 404 Not Found"); 

    return $this->catchs; 

    } //f 

} // class 
$hr = new HEADERS(array 
(

    "set" => array 
    (
     "ck"=> array(
     "true" => "" 
     ), 
     "ss"=> array 
     (
     "true" => "") 
    ), 
    "unset" => array 
    (
     "ck"=> array 
     (
     "true" => "YES", 
     "Test" => "1" 
     ), 
     "ss"=> array 
     (
     "true" => "") 
    ) 
) 

    ); 


print_r($_COOKIE).print_r($hr->send()); 

/* 
      " f" => "" , 
      " sf" => "", 
      "my"=> "" , 

print_r(getallheaders()); 
print_r(setcookie('sd', 'dsds', 3600*6)); 
*/ 

?> 
0

一个错误我在你的代码中看到的是

function _constract() 

这应该是

function __construct() 
+0

Yeh !!但没有课。我用setcookie(name,'',time() - 9600)进行了检查。它不工作。 Cookies保存在浏览器中。但没有删除。 – user174372

0
setcookie($cookie_name, null, null); 

将删除一个cookie不管。在任何逻辑验证之前,在脚本的开头使用php。如果你使用这个,你的cookies没有被删除,你要么使用xml请求,要么你的逻辑中有一些问题。祝你好运!