Возможно это какие-то совсем азы, но я в тупике.
У меня WebApp приложение в Телеграм. Есть app.php, в которой есть видео-трансляция mjpg
<img class="video-stream" src="mjpg.php" width="720" height="480">
сам mjpg.php - это стрим с камеры
function streamCallback($curl, $data) {
if (!headers_sent()) {
header('Content-Type: multipart/x-mixed-replace; boundary=myboundary');
}
echo $data;
return strlen($data);
} # дальше там curl и обработка ошибок...
небольшое отступление, если кто не в курсе что за webapp. при открытии сайта через телеграм - он открывается по ссылке website.com/webpage.php#telegramData=1&data=2&... . В data хранится базовая информация о пользователе, с помощью которой его можно авторизовать. Главное, в нём хранится hash, с помощью которого можно произвести проверку пользователя. Также эта data доступна из window.Telegram.WebApp.initData.
до того, как я узнал, что оказывается webapp телеграма при открытии в web версии браузера не поддерживает cookie у меня это работало вот так:
в начале app.php и mjpg.php был добавлен include 'auth.php';
if (isset($_COOKIE['tguser'])) {
$data_check_string = $_COOKIE['tguser'];
$bot_token = 'xxx';
# если в cookie вообще нет hash
if (strpos($data_check_string, 'hash=') === false) {
setcookie("tguser", "", time() - 3600, "/");
http_response_code(403);
die();
}
# та самая проверка пользователя через hash
$checkData = checkData($data_check_string,$bot_token);
# если проверку не прошли
if($checkData === false){
setcookie("tguser", "", time() - 3600, "/");
http_response_code(403);
die();
}
} elseif (isset($_COOKIE['admin']) && $_COOKIE['admin'] === "123") {
# какой-то гвно код, потому что "ничего не делать" - это оказывается тоже что-то делать
# это нужно, чтобы я всегда был авторизован.
} else {
?>
<script src="https://telegram.org/js/telegram-web-app.js"></script>
<script>
// ну и моя жемчужина, которая записывает в cookie и обновляет страницу
let tg = window.Telegram.WebApp;
document.cookie = `tguser=${tg.initData}; path=/; Secure`;
location.reload();
</script>
<?php
die();
}
?>
суть такая: при открытии app.php происходит include auth.php, который в свою очередь проверяет есть ли cookie с данными пользователя. Если cookie таких нет, то происходит запись cookie и обновление страницы. После обновления у нас срабатывает первый if, так как cookie появились и мы можем проверить пользователя. Такая же процедура происходит с mjpg.php за исключением того, что cookie у нас уже есть и там просто проходит дополнительная проверка.
Теперь если убрать из моей логики cookie, то я уже не знаю, каким образом мне проверять пользователя на сервере
Мне нужно закрыть доступ к mjpg.php неавторизованному пользователю. Когда у меня всё работало со смартфона и с браузера, я обнаружил, что в веб-версии телеграмма есть свой браузер для открытия webapp и в нём недоступны cookie. И теперь вся моя схема ломается. Как мне теперь закрыть доступ к mjpg.php для левых граждан?