# Session storage

You can store parameter values for a specific user within a conversation in
session storage. Your Action can then use those stored values later in prompts
and conditions, and your webhook code can access values in session storage for
the conversation when necessary.

During a conversation, any data collected using [types](https://developers.google.com/assistant/conversational/types) is stored in session
storage. You can also interact with data in session storage using webhook calls.
For webhook calls, the state of session storage is passed in an `app.handle()`
request and is stored in the [`session`](https://developers.google.com/assistant/conversational/reference/rest/v1/TopLevel/fulfill#Session) object.

Data stored in session storage expires when a conversation ends.

## Read and write data to session storage

To update or set a new value in session storage, assign the value to the
`params` field of the `session` object in a webhook call. The following example
sets "exampleColor" to "red" in session storage:

### Node.js

```javascript
// Assign color to session storage
app.handle('storeColor', conv => {
  let color = 'red';
  conv.session.params.exampleColor = color;
});
    
```

### JSON

```
{
  "responseJson": {
    "session": {
      "id": "12345678901234567890",
      "params": {
        "exampleColor": "red"
      }
    },
    "prompt": {
      "override": false
    }
  }
}
    
```

To access data stored in session storage, assign it to a variable in a webhook
call. The following example retrieves a value from "exampleColor" in session
storage:

### Node.js

```javascript
// Retrieve color from session storage
app.handle('getStoredColor', conv => {
  let color = conv.session.params.exampleColor;
});
    
```

### JSON

```
{
  "responseJson": {
    "session": {
      "id": "12345678901234567890",
      "params": {
        "exampleColor": "red"
      }
    },
    "prompt": {
      "override": false
    }
  }
}
    
```

To clear a previously saved value, set the value to `null` in a webhook call.
The following example clears the value of "exampleColor" in session storage:

### Node.js

```javascript
// Clear color from session storage
app.handle('clearStoredColor', conv => {
  conv.session.params.exampleColor = null;
});
    
```

### JSON

```
{
  "responseJson": {
    "session": {
      "id": "12345678901234567890",
      "params": {}
    },
    "prompt": {
      "override": false
    }
  }
}
    
```

## Reference stored values within prompts

You can reference values stored in session storage in a [prompt](https://developers.google.com/assistant/conversational/prompts). To reference the
value, use `$session.params.PARAMETER_NAME` syntax, where
`PARAMETER_NAME` is the name given in the webhook when the parameter
was set.

For example, you previously stored a color value in session storage as the
parameter `exampleColor`. To access that value in a prompt, you reference that
value using `$session.params.exampleColor`:

### JSON

```
{
  "candidates": [{
    "first_simple": {
      "variants": [{
        "speech": "Your favorite color is $session.params.exampleColor."
      }]
    }
  }]
}
    
```

## Reference stored values within conditions

You can also reference values stored in session storage in [conditions](https://developers.google.com/assistant/conversational/conditions). To
reference the value, use the `session.params.PARAMETER_NAME`
syntax, where `PARAMETER_NAME` is the name given in the webhook when
the parameter was set.

For example, you previously stored a color value in session storage as the
parameter `exampleColor`, and you want to match it with the value "red" in a
condition. In your condition, you reference the stored value using
`session.params.exampleColor`. Your condition expression then looks like this:

### Condition syntax

```
session.params.exampleColor == "red"
    
```