---
id: api/commands/setcookie
title: setCookie | Cypress Documentation
description: Set a browser cookie in Cypress.
section: api
source_path: docs/api/commands/setcookie.mdx
version: e6988a974973e9090ce70406c38cb2b9e0eac9fa
updated_at: '2026-05-15T15:50:22.536Z'
---
# setCookie

Set a browser cookie.

## Syntax

```
cy.setCookie(name, value)cy.setCookie(name, value, options)
```

### Usage

**Correct Usage**

```
cy.setCookie('auth_key', '123key') // Set the 'auth_key' cookie to '123key'
```

### Arguments

**name _(String)_**

The name of the cookie to set.

**value _(String)_**

The value of the cookie to set.

**options _(Object)_**

Pass in an options object to change the default behavior of `cy.setCookie()`.

| Option | Default | Description |
| --- | --- | --- |
| `log` | `true` | Displays the command in the [Command log](/llm/markdown/app/core-concepts/open-mode.md#Command-Log) |
| `domain` | Hostname of the current URL | The domain the cookie is visible to |
| `expiry` | 20 years into the future | When the cookie expires, specified in seconds since [Unix Epoch](https://en.wikipedia.org/wiki/Unix_time). |
| `hostOnly` | `false` | Whether the cookie is a host-only cookie, (i.e. the request's host must exactly match the domain of the cookie) |
| `httpOnly` | `false` | Whether the cookie is an HTTP only cookie |
| `path` | `/` | The cookie path |
| `secure` | `false` | Whether the cookie is a secure cookie |
| `timeout` | [`responseTimeout`](/llm/markdown/app/references/configuration.md#Timeouts) | Time to wait for `cy.setCookie()` to resolve before [timing out](#Timeouts) |
| `sameSite` | `undefined` | Cookie's SameSite value. If set, should be one of `lax`, `strict`, or `no_restriction`. Pass `undefined` to use the browser's default. Note: `no_restriction` can only be used if the `secure` flag is set to `true`. |

### Yields [Learn about subject management](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Subject-Management)

`cy.setCookie()` yields a cookie object with the following properties:

*   `domain`
*   `expiry` _(if specified)_
*   `hostOnly` _(if specified)_
*   `httpOnly`
*   `name`
*   `path`
*   `sameSite` _(if specified)_
*   `secure`
*   `value`

## Examples

### Name Value

#### Set a cookie

```
cy.getCookies().should('be.empty')cy.setCookie('session_id', '189jd09sufh33aaiidhf99d09')cy.getCookie('session_id').should(  'have.property',  'value',  '189jd09sufh33aaiidhf99d09')
```

## Rules

### Requirements [Learn about chaining commands](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Chains-of-Commands)

*   `cy.setCookie()` requires being chained off of `cy`.

### Assertions [Learn about assertions](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Assertions)

*   `cy.setCookie()` will only run assertions you have chained once, and will not [retry](/llm/markdown/app/core-concepts/retry-ability.md).

### Timeouts [Learn about timeouts](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Timeouts)

*   `cy.setCookie()` should never time out.

Because `cy.setCookie()` is asynchronous it is technically possible for there to be a timeout while talking to the internal Cypress automation APIs. But for practical purposes it should never happen.

## Command Log

**_Set a cookie on the browser for testing_**

```
cy.getCookies().should('be.empty')cy.setCookie('fakeCookie1', '123ABC')cy.getCookie('fakeCookie1').should('have.property', 'value', '123ABC')
```

The commands above will display in the Command Log as:

When clicking on `setCookie` within the command log, the console outputs the following:

## History

| Version | Changes |
| --- | --- |
| [12.7.0](/llm/markdown/app/references/changelog.md#12-7-0) | Support `hostOnly` option for a given domain. |
| [5.0.0](/llm/markdown/app/references/changelog.md#5-0-0) | Removed `experimentalGetCookiesSameSite` and made `sameSite` property always available. |
| [4.3.0](/llm/markdown/app/references/changelog.md#4-3-0) | Added `sameSite` property when the [experimentalGetCookiesSameSite](/llm/markdown/app/references/configuration.md#Experiments) configuration value is `true`. |
| [0.16.0](/llm/markdown/app/references/changelog.md#0-16-0) | `cy.setCookie()` command added |

## See also

*   [`cy.clearCookie()`](/llm/markdown/api/commands/clearcookie.md)
*   [`cy.clearCookies()`](/llm/markdown/api/commands/clearcookies.md)
*   [`cy.getCookie()`](/llm/markdown/api/commands/getcookie.md)
*   [`cy.getCookies()`](/llm/markdown/api/commands/getcookies.md)
*   [`Cypress.Cookies.debug()`](/llm/markdown/api/cypress-api/cookies.md)
