Changes
Title
unchanged
Cookie management in Yii
Category
unchanged
How-tos
Yii version
unchanged
Tags
changed
cookies, cookie, chttpcookie, ccookiecollection, safe reading
Content
changed
[...]
```php
$cookie = Yii::app()->request->cookies['cookie_name']->value;
```
See also "Safe reading" in the next chapter.
### Writing a cookie
To write a cookie value, use following code:
```php
Yii::app()->request->cookies['cookie_name'] = new CHttpCookie('cookie_name', $value);
```
Notice, that cookie name must be given twice! See also "Reload required" in the next chapter.ince Yii 1.1.11 you can also access the cookie value directly without accessing the value property first.
```php
$value = (string)Yii::app()->request->cookies['cookie_name'];
```
**Note**: You should only use this if you are sure the cookie exists.
Also this may not work on PHP prior to 5.2 (See [PHP.net -> __toString()](http://www.php.net/manual/en/language.oop5.magic.php#object.tostring "PHP.net -> __toString()")).
See also "Safe reading" in the next chapter.
### Writing a cookie
Notice, that you have to specify the name twice, if you want to use this:
```php
Yii::app()->request->cookies['cookie_name'] = new CHttpCookie('cookie_name', $value);
```
See also "Reload required" in the next chapter.
### Configure a cookie
Starting with Yii 1.1.11 you can configure an cookie upon creation.
```php
$cookieCollection['name'] = new CHttpCookie('name', 'value', $options);
```
The option parameter is internally passed to the public method [CHttpCookie::configure()](http://www.yiiframework.com/doc/api/1.1/CHttpCookie#configure-detail "CHttpCookie::configure()") which accepts an array with the following keys:
- [domain](http://www.yiiframework.com/doc/api/1.1/CHttpCookie#domain-detail "domain")
- [expire](http://www.yiiframework.com/doc/api/1.1/CHttpCookie#expire-detail "expire")
- [secure](http://www.yiiframework.com/doc/api/1.1/CHttpCookie#secure-detail "secure")
- [path](http://www.yiiframework.com/doc/api/1.1/CHttpCookie#path-detail "path")
- [httpOnly](http://www.yiiframework.com/doc/api/1.1/CHttpCookie#httpOnly-detail "httpOnly")
### Deleting a cookie[...]
### Cookies are objects
Cookies in Yii are read from [CHttpCookie](http://www.yiiframework.com/doc/api/1.1/CHttpCookie/ "") which is **an object**, that's why you have add **->value** to your code (see examples in previous chapter). If you omit that, you'll get warning or error saying that object of class CHttpCookie cannot be converted to a string.. Also it is important to know that
```php
Yii::app()->request->cookies;
```
is an instance of [CCookieCollection](http://http://www.yiiframework.com/doc/api/1.1/CCookieCollection "CCookieCollection") which extends [CMap](http://www.yiiframework.com/doc/api/1.1/CMap "CMap"), therefore it is possible to use simliar to an array.
### Safe reading
On the same basis, as above, if a particular cookie does not exists, a corresponding object (CHttpCookie instance) for it will not be created! Trying to read such cookie will result in error "Trying to get property of non-object".
ItTo avoid that, it is always better to read a cookie using ternary operator, like that:
```php
$
cookivalue =
(isset(Yii::app()->request->cookies['cookie_name']
->value)) ? Yii::app()->request->cookies['cookie_name']->value : '';
// or
$value = Yii::app()->request->cookies->contains('cookie_name') ?
Yii::app()->request->cookies['cookie_name']->value : '';
```[...]
```php
$is_cookie = !emptyisset(Yii::app()->request->cookies['cookie_name']
->value);
```[...]
- [Handling Cookies](http://www.yiiframework.com/forum/index.php?/topic/15820-handling-cookies "") forum thread,
Please, extend this article, if you find any mistakes or that something is missing here.
## Links
[Russian version](http://resurtm.com/working-with-cookies-in-yii)