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

Петр Кирюткин
Петр Кирюткин
  • Сообщений: 11
  • Последний визит: Вчера в 14:51

Возможно это какие-то совсем азы, но я в тупике.

У меня WebApp приложение в Телеграм. Есть app.php, в которой есть видео-трансляция mjpg

<img 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 для левых граждан?

Редактировалось: 1 раз (Последний: Вчера в 12:16)
Надежда Стародубцева
Надежда Стародубцева
  • Сообщений: 10
  • Последний визит: Вчера в 12:59

Например, дописывайте к mjpg.php GET параметрами ${tg.initData}, да проверяйте $_GET или как там в php

Светлана Краюшкина
Светлана Краюшкина
  • Сообщений: 4
  • Последний визит: Вчера в 12:44

Храните все данные в url (это $_GET параметры), вместо обновления делайте переход/


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

Авторизуйтесь, чтобы писать на форуме.

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон