2013-07-07 5 views
1

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

Например: пользователь размещает новый заказ в одной форме и добавляет новый элемент в другой, элементы могут быть добавлены в заказы.

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

В настоящее время у меня есть переменная $_SESSION['form'], позволяющая скрипту обработки формы знать, какую функцию использовать после отправки формы. Проблема в том, что при открытии нескольких вкладок это значение будет перезаписано последней открытой вкладкой. У меня было несколько идей о том, как справиться с этим, но пока ничего не идеального.

Идея одна: использовать хэш-значение для определения различных загрузки страницы и отправить хэш как скрытое поле

$hash = $_POST['hash']; 
$form = $_SESSION[$hash]['form']; 

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

Идея два: использовать AJAX, чтобы установить значение $_SESSION['form'] при нажатии отправить

Issue: пользователи, которые не используют JS. Я хотел бы иметь возможность продолжать оказывать поддержку пользователям, которые предпочитают отключать JS, если это возможно, хотя этот метод кажется, что он может быть немного лучше. Однако я не уверен, что здесь могут быть проблемы с совместимостью с браузером.

Идея три: создать хэш-идентификатор для каждого окна

Проблемы: PHP не может различать между вкладками браузера. Это было бы самым идеальным на сегодняшний день.

Idea four: разделите скрипт обработки формы на несколько файлов, тем самым устраняя необходимость в значении, чтобы выбрать, какую функцию использовать.

Проблема: неудобно, но я открыт для этой идеи, если она окажется единственным реальным методом для решения этой проблемы. Однако для этого потребуется справедливая реструктуризация.

Любые идеи о том, как безопасно управлять различными вкладками и информацией о сеансах в PHP?

ответ

1

Это только мое мнение, но я бы использовал идею №1 - каждый раз, когда форма загружается, дайте ей случайный хеш (достаточно md5 времени() + случайного числа), а затем не отставайте от эти хэши, такие как уникальные идентификаторы окон.

Да, это может немного раздуть вашу сессию, но если это не замедлит работу пользователя, я бы не стал беспокоиться об этом. Если это вас действительно беспокоит, вы можете отслеживать, сколько идентификаторов окон, которые вы создали для пользователя (в сеансе), и ограничить его числом до 100 или 1000. Это помешало бы злоумышленнику написать сценарий для открытия миллионов окон ,

Помните, что когда сеанс пользователя разрушен (путем выхода из системы/закрытия браузера), все эти хэши тоже исчезли. И если бы вы ДЕЙСТВИТЕЛЬНО чувствовали себя трудолюбивыми, у вас могла бы быть система истечения срока на хеши. Например, через 2 часа они будут удалены из сеанса.

Но, честно говоря, если бы это был я, я бы просто оставил их на сессии и не беспокоился об этом.

Просто мои 2 цента, Richard

+0

мне нравится идея ограничения до ~ 100, что, скорее всего, позволит приложению масштабироваться довольно хорошо. Моя забота заключалась не столько в размере одной сессии (хотя это отличная точка), а в сумме всех сеансов пользователей (то есть, что, если пользователи 10k вошли в систему). – foochow

Смежные вопросы