此问题在此处已有答案:
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必须记住的对象的名称,这就是为什么我不使用数据库,因为数据是在用户提供所有数据后发送到数据库的。我还希望我的机器人记住在女巫状态下创建一个新对象的请求是(这是我想记住的数据与会话)
1条答案
按热度按时间a9wyjsp71#
在为Webhook编写代码时,你不能简单地假设会话总是相同的。
整个假设是错误的。会话与客户端相关联。只要您是客户端,您就可以看到您的会话,但对于您的用户来说,情况并非如此。
简而言之: 不要在webhook中使用session信息。