\Cake\Controller\ComponentCookieComponent

Cookie Component.

Provides enhanced cookie handling features for use in the controller layer. In addition to the basic features offered be Cake\Http\Response, this class lets you:

  • Create and read encrypted cookies.
  • Store non-scalar data.
  • Use hash compatible syntax to read/write/delete values.

Summary

Methods
Properties
Constants
__construct()
getController()
initialize()
__get()
implementedEvents()
__debugInfo()
setConfig()
getConfig()
config()
configShallow()
log()
configKey()
write()
read()
check()
delete()
$request
$response
$components
No constants found
_getCookieEncryptionKey()
_encrypt()
_checkCipher()
_decrypt()
_decode()
_implode()
_explode()
_configRead()
_configWrite()
_configDelete()
_load()
_write()
_delete()
$_validCiphers
$_registry
$_defaultConfig
$_componentMap
$_config
$_configInitialized
$_keyConfig
$_values
$_loaded
$_response
N/A
No private methods found
No private properties found
N/A

Properties

$components

$components : array

Other Components this component uses.

Type

array

$_validCiphers

$_validCiphers : array

Valid cipher names for encrypted cookies.

Type

array

$_defaultConfig

$_defaultConfig : array

Default config

  • expires - How long the cookies should last for. Defaults to 1 month.
  • path - The path on the server in which the cookie will be available on. If path is set to '/foo/', the cookie will only be available within the /foo/ directory and all sub-directories such as /foo/bar/ of domain. The default value is base path of app. For e.g. if your app is running under a subfolder "cakeapp" of document root the path would be "/cakeapp/" else it would be "/".
  • domain - The domain that the cookie is available. To make the cookie available on all subdomains of example.com set domain to '.example.com'.
  • secure - Indicates that the cookie should only be transmitted over a secure HTTPS connection. When set to true, the cookie will only be set if a secure connection exists.
  • key - Encryption key used when encrypted cookies are enabled. Defaults to Security.salt.
  • httpOnly - Set to true to make HTTP only cookies. Cookies that are HTTP only are not accessible in JavaScript. Default false.
  • encryption - Type of encryption to use. Defaults to 'aes'.

Type

array

$_componentMap

$_componentMap : array

A component lookup table used to lazy load component objects.

Type

array

$_config

$_config : array

Runtime config

Type

array

$_configInitialized

$_configInitialized : boolean

Whether the config property has already been configured with defaults

Type

boolean

$_keyConfig

$_keyConfig : array

Config specific to a given top level key name.

The values in this array are merged with the general config to generate the configuration for a given top level cookie name.

Type

array

$_values

$_values : array

Values stored in the cookie.

Accessed in the controller using $this->Cookie->read('Name.key');

Type

array

$_loaded

$_loaded : array

A map of keys that have been loaded.

Since CookieComponent lazily reads cookie data, we need to track which cookies have been read to account for read, delete, read patterns.

Type

array

$_response

$_response : \Cake\Http\Response|null

A reference to the Controller's Cake\Http\Response object.

Currently unused.

Type

\Cake\Http\Response|null

Methods

__construct()

__construct(\Cake\Controller\ComponentRegistry  $registry, array  $config = array()) 

Constructor

Parameters

\Cake\Controller\ComponentRegistry $registry

A ComponentRegistry this component can use to lazy load its components

array $config

Array of configuration settings.

getController()

getController() : \Cake\Controller\Controller

Get the controller this component is bound to.

Returns

\Cake\Controller\Controller

The bound controller.

initialize()

initialize(array  $config) : void

Initialize config data and properties.

Implement this method to avoid having to overwrite the constructor and call parent.

Parameters

array $config

The config data.

__get()

__get(string  $name) : mixed

Magic method for lazy loading $components.

Parameters

string $name

Name of component to get.

Returns

mixed —

A Component object or null.

implementedEvents()

implementedEvents() : array

Events supported by this component.

Uses Conventions to map controller events to standard component callback method names. By defining one of the callback methods a component is assumed to be interested in the related event.

Override this method if you need to add non-conventional event listeners. Or if you want components to listen to non-standard events.

Returns

array

__debugInfo()

__debugInfo() : array

Returns an array that can be used to describe the internal state of this object.

Returns

array

setConfig()

setConfig(string|array  $key, mixed|null  $value = null, boolean  $merge = true) : $this

Sets the config.

Usage

Setting a specific value:

$this->setConfig('key', $value);

Setting a nested value:

$this->setConfig('some.nested.key', $value);

Updating multiple config settings at the same time:

$this->setConfig(['one' => 'value', 'another' => 'value']);

Parameters

string|array $key

The key to set, or a complete array of configs.

mixed|null $value

The value to set.

boolean $merge

Whether to recursively merge or overwrite existing config, defaults to true.

Throws

\Cake\Core\Exception\Exception

When trying to set a key that is invalid.

Returns

$this

getConfig()

getConfig(string|null  $key = null, mixed  $default = null) : mixed

Returns the config.

Usage

Reading the whole config:

$this->getConfig();

Reading a specific value:

$this->getConfig('key');

Reading a nested value:

$this->getConfig('some.nested.key');

Reading with default value:

$this->getConfig('some-key', 'default-value');

Parameters

string|null $key

The key to get or null for the whole config.

mixed $default

The return value when the key does not exist.

Returns

mixed —

Config value being read.

config()

config(string|array|null  $key = null, mixed|null  $value = null, boolean  $merge = true) : mixed

Gets/Sets the config.

Usage

Reading the whole config:

$this->config();

Reading a specific value:

$this->config('key');

Reading a nested value:

$this->config('some.nested.key');

Setting a specific value:

$this->config('key', $value);

Setting a nested value:

$this->config('some.nested.key', $value);

Updating multiple config settings at the same time:

$this->config(['one' => 'value', 'another' => 'value']);

Parameters

string|array|null $key

The key to get/set, or a complete array of configs.

mixed|null $value

The value to set.

boolean $merge

Whether to recursively merge or overwrite existing config, defaults to true.

Throws

\Cake\Core\Exception\Exception

When trying to set a key that is invalid.

Returns

mixed —

Config value being read, or the object itself on write operations.

configShallow()

configShallow(string|array  $key, mixed|null  $value = null) : $this

Merge provided config with existing config. Unlike `config()` which does a recursive merge for nested keys, this method does a simple merge.

Setting a specific value:

$this->configShallow('key', $value);

Setting a nested value:

$this->configShallow('some.nested.key', $value);

Updating multiple config settings at the same time:

$this->configShallow(['one' => 'value', 'another' => 'value']);

Parameters

string|array $key

The key to set, or a complete array of configs.

mixed|null $value

The value to set.

Returns

$this

log()

log(mixed  $msg, integer|string  $level = \Psr\Log\LogLevel::ERROR, string|array  $context = array()) : boolean

Convenience method to write a message to Log. See Log::write() for more information on writing to logs.

Parameters

mixed $msg

Log message.

integer|string $level

Error level.

string|array $context

Additional log data relevant to this message.

Returns

boolean —

Success of log write.

configKey()

configKey(string  $keyname, null|string|array  $option = null, string|null  $value = null) : array|null

Set the configuration for a specific top level key.

Examples:

Set a single config option for a key:

$this->Cookie->configKey('User', 'expires', '+3 months');

Set multiple options:

$this->Cookie->configKey('User', [
  'expires', '+3 months',
  'httpOnly' => true,
]);

Parameters

string $keyname

The top level keyname to configure.

null|string|array $option

Either the option name to set, or an array of options to set, or null to read config options for a given key.

string|null $value

Either the value to set, or empty when $option is an array.

Returns

array|null

write()

write(string|array  $key, mixed  $value = null) : void

Write a value to the response cookies.

You must use this method before any output is sent to the browser. Failure to do so will result in header already sent errors.

Parameters

string|array $key

Key for the value

mixed $value

Value

read()

read(string|null  $key = null) : string

Read the value of key path from request cookies.

This method will also allow you to read cookies that have been written in this request, but not yet sent to the client.

Parameters

string|null $key

Key of the value to be obtained.

Returns

string —

or null, value for specified key

check()

check(string|null  $key = null) : boolean

Returns true if given key is set in the cookie.

Parameters

string|null $key

Key to check for

Returns

boolean —

True if the key exists

delete()

delete(string  $key) : void

Delete a cookie value

You must use this method before any output is sent to the browser. Failure to do so will result in header already sent errors.

Deleting a top level key will delete all keys nested within that key. For example deleting the User key, will also delete User.email.

Parameters

string $key

Key of the value to be deleted

_getCookieEncryptionKey()

_getCookieEncryptionKey() : string

Returns the encryption key to be used.

Returns

string

_encrypt()

_encrypt(string  $value, string|boolean  $encrypt, string|null  $key = null) : string

Encrypts $value using public $type method in Security class

Parameters

string $value

Value to encrypt

string|boolean $encrypt

Encryption mode to use. False disabled encryption.

string|null $key

Used as the security salt if specified.

Returns

string —

Encoded values

_checkCipher()

_checkCipher(string  $encrypt) : void

Helper method for validating encryption cipher names.

Parameters

string $encrypt

The cipher name.

Throws

\RuntimeException

When an invalid cipher is provided.

_decrypt()

_decrypt(array  $values, string|boolean  $mode, string|null  $key = null) : string|array

Decrypts $value using public $type method in Security class

Parameters

array $values

Values to decrypt

string|boolean $mode

Encryption mode

string|null $key

Used as the security salt if specified.

Returns

string|array —

Decrypted values

_decode()

_decode(string  $value, string|false  $encrypt, string|null  $key) : string|array

Decodes and decrypts a single value.

Parameters

string $value

The value to decode & decrypt.

string|false $encrypt

The encryption cipher to use.

string|null $key

Used as the security salt if specified.

Returns

string|array —

Decoded values.

_implode()

_implode(array  $array) : string

Implode method to keep keys are multidimensional arrays

Parameters

array $array

Map of key and values

Returns

string —

A json encoded string.

_explode()

_explode(string  $string) : string|array

Explode method to return array from string set in CookieComponent::_implode() Maintains reading backwards compatibility with 1.x CookieComponent::_implode().

Parameters

string $string

A string containing JSON encoded data, or a bare string.

Returns

string|array —

Map of key and values

_configRead()

_configRead(string|null  $key) : mixed

Reads a config key.

Parameters

string|null $key

Key to read.

Returns

mixed

_configWrite()

_configWrite(string|array  $key, mixed  $value, boolean|string  $merge = false) : void

Writes a config key.

Parameters

string|array $key

Key to write to.

mixed $value

Value to write.

boolean|string $merge

True to merge recursively, 'shallow' for simple merge, false to overwrite, defaults to false.

Throws

\Cake\Core\Exception\Exception

if attempting to clobber existing config

_configDelete()

_configDelete(string  $key) : void

Deletes a single config key.

Parameters

string $key

Key to delete.

Throws

\Cake\Core\Exception\Exception

if attempting to clobber existing config

_load()

_load(string|array  $key) : void

Load the cookie data from the request and response objects.

Based on the configuration data, cookies will be decrypted. When cookies contain array data, that data will be expanded.

Parameters

string|array $key

The key to load.

_write()

_write(string  $name, string  $value) : void

Set cookie

Parameters

string $name

Name for cookie

string $value

Value for cookie

_delete()

_delete(string  $name) : void

Sets a cookie expire time to remove cookie value.

This is only done once all values in a cookie key have been removed with delete.

Parameters

string $name

Name of cookie