Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как реализовать такой скрипт (редирект) (https://javascript.ru/forum/misc/78439-kak-realizovat-takojj-skript-redirekt.html)

razik 14.09.2019 23:41

Как реализовать такой скрипт (редирект)
 
добрый день,нужна помощь.

Есть 4 страницы html

1.html
2.html
3.html
4.html

пользователь идет сначала на 1.html и так до 4,

задача:

допустим он дошел до 3.html и хочет перейти назад, необходимо его туда не возвращать, и вобще через куки оставить его на той странице на которой он сейчас, т.е. 3, как то отключить возврат назад через куки... если бы он был на 4 стр. и нажал назад , то оставить его на 4.. и тд.

проблема:

не подходит решение на js, т.к. все можно подсмотреть, обфускация кода также не подходит

как реализовать что то подобное ? может кто подскажет

ruslan_mart 15.09.2019 02:31

razik, это нужно делать на уровне сервера. Хранить step на сессию пользователя, генерировать нужную страницу в зависимости от текущего step.

Бэк на каком языке?

razik 15.09.2019 17:37

Цитата:

Сообщение от ruslan_mart (Сообщение 512761)
razik, это нужно делать на уровне сервера. Хранить step на сессию пользователя, генерировать нужную страницу в зависимости от текущего step.

Бэк на каком языке?

я бы выбрал php, но не знаю как сделать то что написал(

laimas 15.09.2019 17:52

Цитата:

Сообщение от razik
я бы выбрал php, но не знаю как сделать

Анализировать запросы клиента. Для этого все запросы клиента нужно хранить в сессии, в РНР это суперглобальный массив $_SESSION. В сессию можно записывать имя файла, которое из сетевого пути можно получить функцией basename. Перед тем как отдать клиенту запрашиваемую страницу, серверный скрипт проверяет содержит ли сессия ранее запомненное имя страницы и если да, то направляет клиента на нее, если же нет, то запоминает новое имя страницы в сессии и перенаправляет на нее.

То есть, на сервере либо все запросы клиента должны перенаправляться на индексный файл, в котором выполняется сценарий вышеописанный, который проверяет, запоминаем, перенаправляет на ... или подключает нужный файл, либо в каждом из ваших файлов должен быть php-код выполняющий эти операции. Для того, чтобы РНР код выполнялся в файлах с расширением .html, это расширение нужно добавить как исполняемое на сервере.

В общем нужно сперва определится со структурой файлов на сервере и прочие условия если таковые есть.

razik 15.09.2019 18:01

Цитата:

Сообщение от laimas (Сообщение 512769)
Анализировать запросы клиента. Для этого все запросы клиента нужно хранить в сессии, в РНР это суперглобальный массив $_SESSION. В сессию можно записывать имя файла, которое из сетевого пути можно получить функцией basename. Перед тем как отдать клиенту запрашиваемую страницу, серверный скрипт проверяет содержит ли сессия ранее запомненное имя страницы и если да, то направляет клиента на нее, если же нет, то запоминает новое имя страницы в сессии и перенаправляет на нее.

То есть, на сервере либо все запросы клиента должны перенаправляться на индексный файл, в котором выполняется сценарий вышеописанный, который проверяет, запоминаем, перенаправляет на ... или подключает нужный файл, либо в каждом из ваших файлов должен быть php-код выполняющий эти операции. Для того, чтобы РНР код выполнялся в файлах с расширением .html, это расширение нужно добавить как исполняемое на сервере.

В общем нужно сперва определится со структурой файлов на сервере и прочие условия если таковые есть.

могу файлы сделать не .html а .php, мне бы понять как реализовать кодом что вы описали выше, структура файлов, все страницы:
1.php
2.php
3.php
4.php
будут в корневом каталоге сайт.ру/

а всю логику хотелось бы вывести в файл если такое возможно?
к примеру config.php а далее получается его можно уже подключить к страничкам .php

<?php include 'config.php';?>

но вот по поводу логики не хватает знаний( поэтому обратился за помощью

laimas 15.09.2019 18:42

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

То чего вы хотите, это некий частный случай, а сценарий должен проверять и выполнять все условия в пределах всей файловой структуры сайта. Если сценарий описать как частный случай без учета этого, то он у вас сразу же развалится как только произойдет запрос не описанный условиями в сценарии. Это понятно?

razik 16.09.2019 10:06

Цитата:

Сообщение от laimas (Сообщение 512772)
Ну а какая тут может быть логика, обычная проверка и выполнение ее результата. Но ведь сайт же не эти 4 страницы, наверное же есть и другие, по крайней мере индексный файл уж точно должен быть. Каково должно быть действие если клиент к примеру после второй страницы запросит иную, которой нет среди указанных?

То чего вы хотите, это некий частный случай, а сценарий должен проверять и выполнять все условия в пределах всей файловой структуры сайта. Если сценарий описать как частный случай без учета этого, то он у вас сразу же развалится как только произойдет запрос не описанный условиями в сценарии. Это понятно?

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

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

laimas 16.09.2019 11:07

Сценарий разрабатывается под определенные цели, если ее нет, то и написать код невозможно. Пользователь попавший впервые на ваш сайт, что попадает сразу на страницу 1.html после чего обязан дойти хоть умри до 4.html? А что дальше?

Без понятия целей этой частной задачи она представляется как прихоть, а не задача. Можно "удержать" так как описано ранее и хватит двух базовых функций для этого. А можно и по иному поступить, например иметь массив с ключами от 1 по N, который описывает файлы, по которым нужно пройти, а сессия хранит счетчик шагов, по которому как по ключу в массиве можно определять и следующий файл, и запрещать переход, и прочее. Но время жизни сессии по умолчанию равно 24 минутам, что должен делать сценарий если находясь на одной из страниц будет запрос клиента тогда, когда сессия умерла? И почему запрещать шаг назад? Например, если речь идет о пошаговом заполнении формы, то запрещать возвраты это большая глупость ибо пользователь может допустить и ошибку в предыдущем шаге, исправить которую он уже не сможет.

Решений может быть как 1000 и одна ночь, какое из них выбрать будет зависеть от цели "удержания", если только это действительно так.

razik 16.09.2019 12:48

Цитата:

Сообщение от laimas (Сообщение 512811)
Сценарий разрабатывается под определенные цели, если ее нет, то и написать код невозможно. Пользователь попавший впервые на ваш сайт, что попадает сразу на страницу 1.html после чего обязан дойти хоть умри до 4.html? А что дальше?

Без понятия целей этой частной задачи она представляется как прихоть, а не задача. Можно "удержать" так как описано ранее и хватит двух базовых функций для этого. А можно и по иному поступить, например иметь массив с ключами от 1 по N, который описывает файлы, по которым нужно пройти, а сессия хранит счетчик шагов, по которому как по ключу в массиве можно определять и следующий файл, и запрещать переход, и прочее. Но время жизни сессии по умолчанию равно 24 минутам, что должен делать сценарий если находясь на одной из страниц будет запрос клиента тогда, когда сессия умерла? И почему запрещать шаг назад? Например, если речь идет о пошаговом заполнении формы, то запрещать возвраты это большая глупость ибо пользователь может допустить и ошибку в предыдущем шаге, исправить которую он уже не сможет.

Решений может быть как 1000 и одна ночь, какое из них выбрать будет зависеть от цели "удержания", если только это действительно так.

1 2 3 4 это все покупки, запрещать нужно чтобы пользователь повторно не купил одно и тоже двигался дальше по страницам, про счетчик вы все верно описали, именно в той последовательности и тех страниц которые нужно указать в конфиге, шаг влево и вправо растрел) назад возвращать на -1 шаг(предыдущую) страницу не допускается как и для нового пользователя попасть сразу на шаг вперед..т.к. он сразу получит что купил, но он этого не делал и захотел сразу перескочить.. примерно так, остается только понять как код накидать с этими 2мя базовыми функциями, я пока в php 0) время сессии максимально возможное

laimas 16.09.2019 13:14

Цитата:

Сообщение от razik
запрещать нужно чтобы пользователь повторно не купил одно и тоже

И что это означает, нельзя купить любой товар в количестве более одного? Или нельзя купить любой товар более одного раза в день, месяц, ...?

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

Все ваши шаги в контексте магазина это просто глупость. В виртуальном магазине так же как и в реальном ведется учет товаров, которые описываются в базе данных, и которые покупатель помещает в корзину. Вот тут уж проверяйте чего там нельзя больше чего-то покупать, то есть положить в корзину. А покупка в виртуальном магазине, это этап оформления заказа.

Не трогайте пока вообще никакого языка программирования, ни серверного, ни клиентского, подумайте над концепцией своего магазина, политикой торговли, и только потом эту концепцию перекладывать в программный код. А все что выше вы тут пишите никуда не годится. Вряд ли вы без знания языка серверного сможете написать магазин, поэтому берите либо готовый движок и стройте на нем свой магазин, либо если он имеет какую-то специфику, которую нельзя реализовать движком готовым, то заказывайте оплачиваемую работу, пишите техническое задание на свой магазин, будет вам рабочий код рабочего магазина.


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