php 当我的webhook从telegram bot API接收更新时,我的会话ID不断变化[重复]

xggvc2p6  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(167)

此问题在此处已有答案

Use session for Telegram bot webhook(2个答案)
4天前关闭。
我有一个xampp本地服务器(用php测试我的电报机器人),它用ngrok把我的服务器打开到互联网上。当我尝试在ngrok url(和本地主机)上调用我的webhook.php文件时,我的会话ID总是相同的(就像它应该的那样)。但是当用户试图向我的机器人发送消息(触发webhook)时,会话ID每次都会改变,所以它不会保存数据!我的ngrok服务器使用https,我的xampp本地服务器使用http。(我也试过使用xampp的https,但会话id一直在变化)。
webhook.php

<?php
session_start();
require 'vendor/autoload.php';
require 'variables.php';

if(isset($_SESSION["statusNewAsta"]))
    $statusNewAsta = $_SESSION["statusNewAsta"];

$bot = new TelegramBot\Api\BotApi($apiToken);

$update = json_decode(file_get_contents('php://input'), true);
file_put_contents('log.txt', session_id(), FILE_APPEND);

echo session_id();

if(isset($update['message'])) {
    $message = $update['message'];
    $chatId = $message['chat']['id'];

    if (isset($message['text']))
        switch ($message['text'])
        {
            case '/start': commandStart($chatId); break;
            case '/newAsta': 
                if(in_array($chatId,$adminIds))
                    commandNewAsta($chatId); 
                else
                    $bot->sendMessage($chatId,'Non puoi eseguire questo comando!');
                break;
            default: 
                if(in_array($chatId,$adminIds))
                    if(isset($_SESSION["statusNewAsta"]))
                        switch ($stepCreatingAsta)
                        {
                            case "waiting_name": getNameNewAsta($chatId,$message['text']);
                        }
                break;
        }
}

字符串
我正在将从webhook接收到的数据保存在一个文件中用于调试,我试图使用相同的方法在请求中调用webhook.php后检查会话ID,并且我可以看到会话ID不断变化。当我试图访问一个变量时,数组显然是空的。
我希望我的会话ID通过webhook调用保持不变,我希望我的用户发送一个bot必须记住的对象的名称,这就是为什么我不使用数据库,因为数据是在用户提供所有数据后发送到数据库的。我还希望我的机器人记住在女巫状态下创建一个新对象的请求是(这是我想记住的数据与会话)

a9wyjsp7

a9wyjsp71#

在为Webhook编写代码时,你不能简单地假设会话总是相同的。
整个假设是错误的。会话与客户端相关联。只要您是客户端,您就可以看到您的会话,但对于您的用户来说,情况并非如此。

简而言之: 不要在webhook中使用session信息。

相关问题