假设我们每个用户都有一个标识符,一种做法是每个用户都分别存一个选项,比如:
<?php
// 获取用户发送的消息
$userInput = $_POST['message'];
// 从请求中获取用户的 FromUserName
$fromUserName = $_POST['fromUserName'];
// 检查用户会话状态
$conversation = get_option('conversation_' . $fromUserName);
if ($conversation) {
// 检查会话是否超过过期时间
if (time() >= $conversation['expiration']) {
// 会话已过期,重置为初始空
$conversation = null;
}
}
if (!$conversation) {
// 创建新的会话状态
$conversation = [
'step' => 1,
'expiration' => time() + 7200, // 设置2小时后过期
// 其他需要存储的会话数据
];
}
// 处理用户输入并生成响应消息和更新的会话状态
$response = processUserInput($userInput, $conversation);
// 更新用户会话状态
update_option('conversation_' . $fromUserName, $response['conversation']);
echo $response['message'];
// 处理用户输入,并返回响应和会话状态
function processUserInput($input, $previousConversation = null) {
// 在这里处理用户输入,生成响应消息和更新的会话状态
// ...
return [
'message' => $responseMessage,
'conversation' => $newConversationState
];
}
这种方式我觉得会让数据库很乱 可以将这个放在一个设置项里面,改写如下:
<?php
// 获取用户发送的消息
$userInput = $_POST['message'];
// 从请求中获取用户的 FromUserName
$fromUserName = $_POST['fromUserName'];
// 检查用户会话状态
$conversation = get_option('user_conversations');
if (!$conversation) {
$conversation = [];
}
// 检查是否存在该用户的会话状态
if (isset($conversation[$fromUserName])) {
// 检查会话是否超过过期时间
if (time() >= $conversation[$fromUserName]['expiration']) {
// 会话已过期,重置为初始空
unset($conversation[$fromUserName]);
}
}
if (!isset($conversation[$fromUserName])) {
// 创建新的会话状态
$conversation[$fromUserName] = [
'step' => 1,
'expiration' => time() + 7200, // 设置2小时后过期
// 其他需要存储的会话数据
];
}
// 处理用户输入并生成响应消息和更新的会话状态
$response = processUserInput($userInput, $conversation[$fromUserName]);
// 更新用户会话状态
update_option('user_conversations', $conversation);
echo $response['message'];
// 处理用户输入,并返回响应和会话状态
function processUserInput($input, $previousConversation = null) {
// 在这里处理用户输入,生成响应消息和更新的会话状态
// ...
return [
'message' => $responseMessage,
'conversation' => $newConversationState
];
}