> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coze.cn/llms.txt
> Use this file to discover all available pages before exploring further.

使用扣子编程 OpenAPI 或 SDK 和扣子智能体或应用对话时，扣子编程会将使用同一个访问密钥的对话看做同一个用户。如果业务侧不同的用户使用同一个扣子编程访问密钥鉴权，用户看到的对话记录中可能会夹杂其他用户的对话历史。
但是在实际业务场景中，往往需要将不同业务侧用户的会话互相隔离开来，每个用户只能看到自己和智能体的对话历史。扣子编程 OAuth JWT 鉴权方式中，支持通过 `session_name` 参数实现会话隔离，避免智能体不同账号的消息内容互相可见。
## 会话隔离方案 {#f2636815}
目前仅 OAuth JWT 鉴权方式支持会话隔离。如果不同的用户使用同一个访问密钥，且需要在一个扣子账号下维护多个用户的对话，建议使用 JWT 方式鉴权，并设置会话隔离。
<!-- @cols-width: 147,291,412 -->
| | | | \
|**会话隔离级别** |**绑定到扣子账号下** |**绑定到扣子账号下的子级下** |
|---|---|---|
| | | | \
|区别 |一个扣子账号内无法隔离会话。 |支持在一个扣子的账号下维护多个子用户的会话。 |
| | | | \
|适用场景 |访问产品的用户本身拥有扣子账号。 |* 基于扣子编程 API 搭建的产品拥有自己的用户，这些用户没有扣子账号。 |\
| | |* 需要隔离这些用户之间的会话。 |
| | | | \
|鉴权方式 |可使用扣子编程目前支持的所有鉴权方式。详细信息可参考[鉴权方式概述](/developer_guides/authentication)。 |**仅 OAuth 的 JWT 鉴权方式可实现会话隔离。但必须在 payload 中添加 session_name 字段。** |
| | | | \
|隔离级别 |渠道（默认） + 扣子账号 + Bot |渠道（默认）  + 扣子账号 + Bot + session_name |

## 设置方式 {#6e96287c}
如需实现会话隔离，需要在调用扣子编程 OpenAPI 或 SDK 时，使用 OAuth JWT 鉴权方式，并在签署 JWT 时，在 payload 字段中添加 session_name 字段。session_name 中应指定用户在业务侧的 UID，String 类型。UID 由业务侧自行定义，扣子编程仅透传这个字段并用于签署 JWT、区分不同 `session_name` 的会话。
签署 JWT 并设置 `session_name` 的具体步骤可参考[3 签署 JWT](/developer_guides/oauth_jwt#abe9ef05)。
## 设置示例 {#206b4090}
开发者搭建了一个智能体，并通过 Chat SDK 的方式嵌入到自建网站中，供网站的访问者使用。如果未设置会话隔离，那么网站中不同的访问者 A 和 B 在智能体对话框中可以查看到其他用户和智能体的对话记录。
开发者可以采用 JWT 方式实现会话隔离，并在 Chat SDK 中使用 JWT 访问密钥鉴权即可。

1. 获取业务侧的用户 UID。
   从网站的账号系统中，获取网站用户 A 和 B 的 UID。此处我们假设 UID 分别为 `USER_A` 和 `USER_B`。 
2. 获取 JWT Token。
   参考[OAuth JWT 授权（开发者）](/developer_guides/oauth_jwt)文档实现 OAuth JWT 授权，并分别为用户 A 和 B 申请 JWT Token。在步骤[3 签署 JWT](/developer_guides/oauth_jwt#abe9ef05) 中，Payload 中添加 `session_name` 字段，并将其设置为网站用户 A 或 B 的 UID。
   用户 A 和 B 分别对应的 JWT Token：
   ```Plain Text
   // 用户 A 的 JWT Token
   czs_RQOhsc7vmUzK4bNgb7hn4wqOgRBYAO6xvpFHNbnl6RiQJX3cSXSguIahiuhwfw****
   
   // 用户 B 的 JWT Token
   czs_DJWOEF7vmUzK4bNgb7hn4wqOgRBYAO6xvpFHNbnl6RiQJX3cSXSguIhFDzgy****
   ```

3. 设置 Chat SDK 鉴权参数。
   参考[安装并使用 Chat SDK](/developer_guides/install_web_sdk)接入 Chat SDK 时，在[步骤四：配置聊天框](/developer_guides/install_web_sdk#d62ce46b)中，auth 的 token 参数设置为网站用户对应的 Token，确保用户 A 和 用户 B 在和智能体对话时，分别使用的是自己的 JWT Token。

## 常见问题 {#cf4dc147}
### 为什么使用会话隔离时，设置了不同的 BotID，但返回的会话 ID 却相同？ {#4e79f7c2}
**可能原因**：
这通常是由于在代码中手动传入了相同的 `conversationID` 参数导致的。
**解决方案**：
为确保会话 ID 的唯一性与隔离性，建议由系统自动生成会话 ID，避免手动在代码中设置 `conversationID` 参数。
### 使用 JWT 鉴权设置会话隔离时，不同会话间设置的用户变量是否会相互隔离？ {#292bbbe9}
会。设置 `session_name` 变量后，扣子编程会按照会话隔离的方式进行区分。不同会话间设置的用户变量将被自动隔离，互不影响。即使不同用户使用了相同的账号密钥，用户 A 与用户 B 的变量也会被独立存储，确保每个会话的用户变量完全隔离。


