Задать вопрос
@accountnujen

Как проверять доступ, если $_COOKIE и $_SESSION недоступны?

Возможно это какие-то совсем азы, но я в тупике.
У меня 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 для левых граждан?
  • Вопрос задан
  • 147 просмотров
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
например, дописывай к mjpg.php GET параметрами ${tg.initData}, да проверяй $_GET или как там в php
Ответ написан
Комментировать
@rPman
Храни все данные в url (это $_GET параметры), вместо обновления делай переход/

Еще момент, зачем ты обновляешь страницу, когда все связанное с авторизацией ты уже сделал? Код авторизации должен быть в самом начале, что бы не было нужды его перезапускать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы