Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 18.04.2022, 21:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Vaska,
не понимаю.
так проверяйте токен, и запоминайте что-то типа

if (sessionStorage.getItem('token')  !== token) {
       sessionStorage.setItem('token', token);
       window.location.reload(true);
    }
Ответить с цитированием
  #12 (permalink)  
Старый 18.04.2022, 21:57
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

рони,
На одной странице есть три блока, каждый из которого подгружает свою страницу .html с помощью Ajax.
Функция PHP, при подгрузке страницы в блок, проверяет не протух ли токен. Если протух, то подставляет скрипт, чтобы перезагрузить страницу и обновить токен.
Вот этот код:
if (!localStorage.getItem("reload")) {
    localStorage.setItem("reload", "true");
    location.reload();
}
else {
    localStorage.removeItem("reload");
}

срабатывает для подгрузки одного блока, если токен протух, перезагружает всю страницу.
Но если токен снова протух, и я хочу перезагрузить второй блок на той же странице, то перезагрузка не работает.

Не знаю как лучше объяснить.
Ответить с цитированием
  #13 (permalink)  
Старый 18.04.2022, 22:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Vaska,
все токены посылайте в эту функцию, если в массиве такого токена нет, страница перезагрузится.
function saveT(token)
{
  let arT = sessionStorage.getItem('token') || "[]";
  arT = JSON.parse(arT);
  if (!arT.includes(token)) {
       arT.push(token)
       sessionStorage.setItem('token', JSON.stringify(arT));
       window.location.reload(true);
    }
}
Ответить с цитированием
  #14 (permalink)  
Старый 18.04.2022, 23:04
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

Честно говоря не понял вашу задумку.
Для каждого блока есть запрос Ajax, который вызывает контент в блок.
Например, для одного из блоков, на странице, есть код вызова:
$(function() {
//вызывает файл qrcode_tools.html
$('.qrcode_tools_user').mouseover(function(event){
	setTimeout(function() {
		$("#qrcode_tools_html").load(HOMESITEURL + '/Index/qrcode_tools.html');
	}, 50);
	$(this).unbind('mouseover');
});
});


В хедере страницы есть код для токена:
$.ajaxSetup({
				headers: {
					'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
				},
				data: {
					'__token__': $('meta[name="csrf-token"]').attr('content')
				},
				//cache: false,
			});
			$.ajaxPrefilter('script', function(options) {
				options.data = ''; // -токен
				options.cache = true; // -таймстэмп
			});


В файле PHP я проверяю не протух ли токен и если не протух, то подгружаю контент:

public function qrcode_tools() {			
			//Проверка общего одноразового токена __token__      и токена для страницы /home/Store/index.html?store_id=1     __token_index__ {:indexToken()}
			$csrf_token = input('get.__token__');
			//Если $csrf_token пустой, тогда блокировать, чтобы в отдельной странице не открывали без токена в ссылке
			if (empty($csrf_token)) {
				header("HTTP/1.1 404 Not Found");
				echo "Not Found";
				exit;				
					  //Проверка токена в ссылке страницы, чтобы совпадал с актуальным токеном и токеном в сессии
			} elseif ($csrf_token != session('__token__') && $csrf_token != session('__token_index__')) {
				echo '' . lang('page_outdated') . '<br>
						<div class="img-loader" style="height:82px;"></div>
						<em class="tips_arrow"></em>
						<script>
							setTimeout(function() {
								if (!localStorage.getItem("reload")) {
									localStorage.setItem("reload", "true");
									location.reload();
								} else {
									localStorage.removeItem("reload");
								}
							}, 2000);
						</script>
					';			
				exit;
			}
			//Загружает контент
			echo '' . lang('ds_mobile_shopping_better') . '<br>
					<img class="img-loader" src="' . HOME_SITE_URL . '/qrcode?url=' . config('ds_config.h5_site_url') . '" width="110" height="110" />
					<em class="tips_arrow"></em>';
		}


Куда добавить ваш код и что убрать из моего кода?
Ответить с цитированием
  #15 (permalink)  
Старый 18.04.2022, 23:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Vaska,
не понимаю, и зачем перезагрузка и в целом,не подскажу, нужен другой специалист.
Ответить с цитированием
  #16 (permalink)  
Старый 18.04.2022, 23:27
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

рони,
Перезагрузка нужна, чтобы обновить токен, если он протух.
Токен нужен актуальный для защиты контента от открытия контента вне нужной страницы.
Ответить с цитированием
  #17 (permalink)  
Старый 18.04.2022, 23:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Vaska,
возможно, вместо строк 15 - 22 надо что-то типа

function saveT(token)
{
  let arT = sessionStorage.getItem('token') || "[]";
  arT = JSON.parse(arT);
  if (!arT.includes(token)) {
       arT.push(token)
       sessionStorage.setItem('token', JSON.stringify(arT));
       window.location.reload(true);
    }
}
saveT($csrf_token<!-- или session('__token__')-->)
Ответить с цитированием
  #18 (permalink)  
Старый 19.04.2022, 00:38
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

рони,
Сейчас всё правильно работает!
Большое спасибо!
Можете мне в личку скинуть куда и сколько отблагодарить за помощь?
Ответить с цитированием
  #19 (permalink)  
Старый 19.04.2022, 00:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Vaska,
Вашего спасибо, достаточно!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тег video не срабатывает при первой загрузке страницы Igorsrt Элементы интерфейса 2 22.09.2018 11:27
Остановить гиф-анимацию при загрузке страницы Quark_ Javascript под браузер 1 01.09.2016 00:20
запуск анонимной функции при загрузке страницы golden_yuna Общие вопросы Javascript 10 16.04.2016 20:42
Задать координаты положения курсора, при загрузке страницы. Blondinka Events/DOM/Window 1 20.02.2016 04:22
Автоматический вызов функции при загрузке страницы DVMade Элементы интерфейса 2 02.03.2015 21:25