2013-07-01 2 views
0

Я собираюсь контролировать содержание моих страниц. так что мне нужно добавлять или удалять сеансы/файлы cookie. Я создал класс, который работает нормально, но в проблеме с файлом cookie он не работает. Я проверил с firefox 18 в windows7 и ubuntu 12.04 LTS. печенье не удаляются с помощьюPHP для удаления cookie в php-классе

 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 (имя, '', время() - 9600). Это не работает. Файлы cookie сохраняются в браузере. но не удаляется. – user174372

0
setcookie($cookie_name, null, null); 

Будет удалить куки ни на что. Используйте это в простой php в начале скрипта перед любой логикой, чтобы проверить это. Если вы используете это, и ваши файлы cookie не удаляются, вы либо используете xml-запросы, либо у вас есть некоторые проблемы в вашей логике. Удачи!

Смежные вопросы