Cookies können in PHP mittels der Funktion setcookie() erzeugt werden. Die Bedienung ist aufgrund der langen Parameterliste aber nicht immer einfach. Und gerade die Defaultwerte bieten keine Sicherheit. So kann Javascript sie ohne weiteres auslesen. Aus diesem Grund habe ich mir um die Funktion herum, eine einfache Klasse gebaut. Die Benutzung wird dadurch stark erleichtert und die Defaultwerte entsprechen der höchsten Sicherheit. Sie können dabei nicht von Javascript ausgelesen werden und der Browser überträgt sie nur wenn eine sichere Verbindung zur Verfügung steht.  Alle Parameter entsprechen in der Beschreibung der Dokumentation von setcookie(). Bei Unklarheiten sollte entsprechend diese als zusätzliche Referenz genutzt werden.

Quellcode:

/**
 * @brief Create a cookie and send it to the browser.
 * @version 1.0
 * @author Stefan Gfroerer
 * @date 2012-01-15
 */
class Cookie
{
    // ================================ Member =================================
    protected $_domain = '';        ///< string
    protected $_expire = 0;         ///< int
    protected $_httpOnly = true;    ///< bool
    protected $_name = '';          ///< string
    protected $_path = '/';         ///< string
    protected $_secure = true;      ///< bool
    protected $_value = '';         ///< string

    // =========================== Public functions ============================
    /**
     * @param string $name Name of the cookie.
     */
    public function __construct( $name )
    {
        $this->_name = $name;

        // Set all member via setter to ensure the use of correct default values.
        $this->setDomain();
        $this->setExpire();
        $this->setHttpOnly();
        $this->setPath();
        $this->setSecure();
        $this->setValue();
    }

    /**
     * @brief Deletes the cookie from the browser.
     */
    public function delete()
    {
        // Temporary save expire time.
        $expireOld = $this->_expire;

        /* Deletion can be achieved by sending the cookie with a negative expire
           time. */
        $this->setExpire( -1 );
        $this->send();

        // Reset expire time.
        $this->setExpire( $expireOld );
    }

    /**
     * @brief Sends the cookie to the browser.
     */
    public function send()
    {
        setcookie( $this->_name, $this->_value, $this->_expire, $this->_path,
                   $this->_domain, $this->_secure, $this->_httpOnly );
    }

    /**
     * @param string $domain The domain in which the cookie is available.
     */
    public function setDomain( $domain = '' )
    {
        $this->_domain = $domain;
    }

    /**
     * @param int $expire The time before the cookie expires. If the value is 0
     *                    it will expire after closing the browser. Negative
     *                    values delete the cookie.
     */
    public function setExpire( $expire = 0 )
    {
        $this->_expire = $expire;
    }

    /**
     * @param bool $isHttpOnly If true the cookie is only for the webserver available
     *                         else also for javascript...
     */
    public function setHttpOnly( $isHttpOnly = true )
    {
        $this->_httpOnly = $isHttpOnly;
    }

    /**
     * @param string $path The path in which the cookie is available. If "/" it
     *                     is everywhere available. With "" only in the current
     *                     directory.
     */
    public function setPath( $path = '/' )
    {
        $this->_path = $path;
    }

    /**
     * @param bool $isSecure If true the cookie will be send by the browser only
     *                       with secure connections (like https).
     */
    public function setSecure( $isSecure = true )
    {
        $this->_secure = $isSecure;
    }

    /**
     * @param string $value The value of the cookie.
     */
    public function setValue( $value = '' )
    {
        $this->_value = $value;
    }
}

Beispiel:

Ein Cookie mit dem Namen “foobar” und dem Inhalt “Hello World”. Aufgrund der Defaultwerte ist es auf der gesamten Subdomain mit allen Unterpfaden aktiv  und wird vom Browser nach schließen der Sitzung automatisch gelöscht.

$cookie = new Cookie( 'foobar' );
$cookie->setValue( 'Hello World' );
$cookie->send();

Manuelles löschen des obigen Cookies.

$cookie = new Cookie( 'foobar' );
$cookie->delete();
Advertisements