X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FWebResponse.php;h=26fb20f331b2cc4fbb00d225b6af0c7a6adc2d35;hb=ea9fcc1e4d3b572199d82c426024e3e5efe23879;hp=1b6947cd961c4a09177f1fb0e7d62e13515d7956;hpb=b305d72af57101d580783d639e0cd88f2a049dae;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/WebResponse.php b/includes/WebResponse.php index 1b6947cd96..26fb20f331 100644 --- a/includes/WebResponse.php +++ b/includes/WebResponse.php @@ -81,7 +81,7 @@ class WebResponse { * 'prefix', 'domain', and 'secure' * @since 1.22 Replaced $prefix, $domain, and $forceSecure with $options */ - public function setcookie( $name, $value, $expire = 0, $options = array() ) { + public function setCookie( $name, $value, $expire = 0, $options = array() ) { global $wgCookiePath, $wgCookiePrefix, $wgCookieDomain; global $wgCookieSecure, $wgCookieExpiration, $wgCookieHttpOnly; @@ -136,6 +136,19 @@ class WebResponse { $options['httpOnly'] ); } } + + /** + * Unset a browser cookie. + * This sets the cookie with an empty value and an expiry set to a time in the past, + * which will cause the browser to remove any cookie with the given name, domain and + * path from its cookie store. Options other than these (and prefix) have no effect. + * @param string $name Cookie name + * @param array $options Cookie options, see {@link setCookie()} + * @since 1.27 + */ + public function clearCookie( $name, $options = array() ) { + $this->setCookie( $name, '', time() - 31536000 /* 1 year */, $options ); + } } /** @@ -207,18 +220,74 @@ class FauxResponse extends WebResponse { * @param int|null $expire Ignored in this faux subclass. * @param array $options Ignored in this faux subclass. */ - public function setcookie( $name, $value, $expire = 0, $options = array() ) { - $this->cookies[$name] = $value; + public function setCookie( $name, $value, $expire = 0, $options = array() ) { + global $wgCookiePath, $wgCookiePrefix, $wgCookieDomain; + global $wgCookieSecure, $wgCookieExpiration, $wgCookieHttpOnly; + + if ( !is_array( $options ) ) { + // Backwards compatibility + $options = array( 'prefix' => $options ); + if ( func_num_args() >= 5 ) { + $options['domain'] = func_get_arg( 4 ); + } + if ( func_num_args() >= 6 ) { + $options['secure'] = func_get_arg( 5 ); + } + } + $options = array_filter( $options, function ( $a ) { + return $a !== null; + } ) + array( + 'prefix' => $wgCookiePrefix, + 'domain' => $wgCookieDomain, + 'path' => $wgCookiePath, + 'secure' => $wgCookieSecure, + 'httpOnly' => $wgCookieHttpOnly, + 'raw' => false, + ); + + if ( $expire === null ) { + $expire = 0; // Session cookie + } elseif ( $expire == 0 && $wgCookieExpiration != 0 ) { + $expire = time() + $wgCookieExpiration; + } + + $this->cookies[$options['prefix'] . $name] = array( + 'value' => (string)$value, + 'expire' => (int)$expire, + 'path' => (string)$options['path'], + 'domain' => (string)$options['domain'], + 'secure' => (bool)$options['secure'], + 'httpOnly' => (bool)$options['httpOnly'], + 'raw' => (bool)$options['raw'], + ); } /** * @param string $name * @return string|null */ - public function getcookie( $name ) { + public function getCookie( $name ) { + if ( isset( $this->cookies[$name] ) ) { + return $this->cookies[$name]['value']; + } + return null; + } + + /** + * @param string $name + * @return array|null + */ + public function getCookieData( $name ) { if ( isset( $this->cookies[$name] ) ) { return $this->cookies[$name]; } return null; } + + /** + * @return array + */ + public function getCookies() { + return $this->cookies; + } }