<?php
/**
* MultiDomainCookie
*
* Klasa odpowiedzialna za rozsyłanie ciastekczek na parę domen,
* dzięki temu, będą one ważne na różnych domenach.
*
* @author Paweł `hwao` Halicki
* @version 0.0.9
*/
class MultiDomainCookie {
private $aDomains = array(); private $sDomain = null;
public $iCookieExpires = 2678400; // 31 days
/**
* MultiDomainCookie::__construct()
*
* @param array $aDomains gdzie maja byc widoczne cookie
* @param string $sDomain na ktorej domenie jesteś teraz
*/
public function __construct( $aDomains, $sDomain ) {
$this->aDomains = $aDomains;
$this->sDomain = $sDomain;
}
/**
* MultiDomainCookie::Relocation()
*
* Wszystkie cookie, które funkcjonują na tej domenie
* zostana przepisane na reszte
*
*/
public function Relocation() {
foreach( $_COOKIE As $sCookieName => $sCookieValue ) {
foreach( $this->aDomains As $sDomain ) {
if( $sDomain != $this->sDomain ) {
setCookie( $sCookieName, $sCookieValue, time()+$this->iCookieExpires, '', $sDomain ); }
}
}
}
/**
* MultiDomainCookie::set()
*
* Ustawianie cookie na kazda domene
* Api zgodne z setCookie(), ale podawanie $sPath i $sDomain jest ignorowane
*
* @param string $sName
* @param string $sValue
* @param integer $iExpires
* @param string $sPath
* @param string $sDomain
* @param string $sSecure
*/
public function set( $sName, $sValue = null, $iExpires = -1, $sPath = null, $sDomain = null, $sSecure = false ) {
$iExpires = ( $iExpires == -1
) ?
time()+$this->iCookieExpires : $iExpires;
foreach( $this->aDomains As $_sDomain ) {
setCookie( $sName, $sValue, $iExpires, $sPath, $_sDomain, $sSecure ); }
}
/**
* MultiDomainCookie::delete()
*
* Usuwanie cookie ze wszystkich domen
*
* @param string $sName
* @param string $sValue
* @param integer $iExpires
* @param string $sPath
* @param string $sDomain
* @param string $sSecure
*/
public function Delete( $sName, $sValue = null, $iExpires = -1, $sPath = '', $sDomain = null, $sSecure = false ) {
$iExpires = $iExpires == -1 ?
time()-$this->iCookieExpires : $iExpires;
foreach( $this->aDomains As $_sDomain ) {
setCookie( $sName, $sValue, $iExpires, $sPath, $_sDomain, $sSecure ); }
}
/**
* MultiDomainCookie::deleteAll()
*
* Usuwanie wszyskich ciasteczek z domenie (które funckjonuja na tej domenie);
*
*/
public function DeleteAll() {
foreach( $_COOKIE As $sCookieName => $sCookieValue ) {
$this->Delete( $sName, null, -1 );
}
}
}
// Lista domene, na których maja byc ciasteczka
// Ustawienie .example.com powoduje ze cookie dziala
// zarowno na test.example.com jak i dev.example.com jak i na samym example.com/www.example.com
'hwao.be',
'php.pl',
'forum.php.pl',
);
// Pobieram sobie z server domene na której jest teraz user.
$sDomain = 'hwao.be'; // ja na szybko :) w $_SERVER to masz
// Tworzymy obiekt :)
$MDCookie = new MultiDomainCookie( $aDomains, $sDomain );
// Wszyskie cookie jakie są na hwao.be, zostaną przepisane na reszte domen
$MDCookie->Relocation();
// Te ciasteczko powinno byc widoczne na kazdej domenie
$MDCookie->set( 'hwao', 'test', time()+3600
);
// Usuniecie ciacha
$MDCookie->delete( 'hwao', 'test', time()+3600
);
// Usuwa wszyskie ciastka
$MDCookie->deleteAll();
?>
Powinno dzialac, zastosuj tylko
<?php
// Lista domene, na których maja byc ciasteczka
// Ustawienie .example.com powoduje ze cookie dziala
// zarowno na test.example.com jak i dev.example.com jak i na samym example.com/www.example.com
'hwao.be',
'php.pl',
'forum.php.pl',
);
// Pobieram sobie z server domene na której jest teraz user.
$sDomain = 'hwao.be'; // ja na szybko :) w $_SERVER to masz
// Tworzymy obiekt :)
$MDCookie = new MultiDomainCookie( $aDomains, $sDomain );
// Wszyskie cookie jakie są na hwao.be, zostaną przepisane na reszte domen
$MDCookie->Relocation();
?>