wordpress如何将数组对象保存在数据库中并设置数据有效期

Author: 陌小雨Date: 2024-12-20View: 285

假设我们每个用户都有一个标识符,一种做法是每个用户都分别存一个选项,比如:

<?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
    ];
}