Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Перезагрузить страницу один раз скриптом при первой загрузке страницы (https://javascript.ru/forum/events/83909-perezagruzit-stranicu-odin-raz-skriptom-pri-pervojj-zagruzke-stranicy.html)

рони 18.04.2022 21:36

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

if (sessionStorage.getItem('token')  !== token) {
       sessionStorage.setItem('token', token);
       window.location.reload(true);
    }

Vaska 18.04.2022 21:57

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

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

Не знаю как лучше объяснить.

рони 18.04.2022 22:12

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);
    }
}

Vaska 18.04.2022 23:04

Честно говоря не понял вашу задумку.
Для каждого блока есть запрос 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>';
		}


Куда добавить ваш код и что убрать из моего кода?

рони 18.04.2022 23:11

Vaska,
не понимаю, и зачем перезагрузка и в целом,не подскажу, нужен другой специалист.

Vaska 18.04.2022 23:27

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

рони 18.04.2022 23:56

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__')-->)

Vaska 19.04.2022 00:38

рони,
Сейчас всё правильно работает!
Большое спасибо!
Можете мне в личку скинуть куда и сколько отблагодарить за помощь?

рони 19.04.2022 00:50

Vaska,
Вашего спасибо, достаточно! :)


Часовой пояс GMT +3, время: 00:21.