Intereting Posts
Представление JQuery / Ajax (enctype = "multipart / form-data"). Почему «contentType: False» вызывает неопределенный индекс в PHP? Как увеличить на 1 все ключи в массиве? Кэширование переменных в переменной $ _SESSION? PHP Native DOMDocument и простой DOM Parser – существует ли ограничение по размеру? Что означает символ периода (.), Если он используется в середине строки php? Как сделать xml-файл из php и mysql Усовершенствовать html-выход Нажав на ссылку, вы увидите ее в Разном Div на той же странице Идеи в очень простом, но безопасном входе читать и искать в pdf-файле Как я могу расшифровать зашифрованное значение MCRYPT_RIJNDAEL_256 в C #, которое было зашифровано mcrypt в PHP? Как перенумеровать колонку в доктрине Функция просмотра, как здесь, на SO Исправлены сломанные изображения в электронной почте из-за изменения пути к ресурсам сервера Как отправить запрос на отправку в RESTserver api в php-Codeigniter?

обнаружить текущую вкладку

Можно ли определить, открывается ли страница в двух разных браузерах?

Я создал небольшое приложение, которое хранит некоторые данные в $ _SESSION, и проблема в том, что при открытии нескольких вкладок сеансовые вары перезаписываются (фильтры поиска в форме поиска), и поэтому вкладки могут отображать те же результаты, что, очевидно, разные поиски.

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

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

edit: @arjun: да, я знаю, но мне нужно восстановить фильтры поиска, когда пользователь вернется на страницу поиска 🙂 так что SESSION – это способ пойти на это. Кроме того, фильтры отправляются AJAX, и его сложно отлаживать, когда у вас много фильтров (GET ограничен по размеру, поэтому я использую POST)

@tomhaigh: thx..but это то, что я пытаюсь сделать прямо сейчас, но это займет некоторое время, потому что эта вкладка «вещь» влияет на все приложение, и я должен менять фильтры во всех модулях … i теперь искал что-то быстрое и грязное. Совет. Я не хочу использовать time () и rand (), поскольку эти функции могут (и в конечном итоге) генерировать повторяющиеся числа. В новом «переписывании» я использую microtime из PHP и Date.getTime () в JS и объединяю эти 2, чтобы генерировать поистине уникальный идентификатор. Кроме того, я написал функцию для синтаксического анализа SESSION время от времени и очистки хранимых фильтров старше 2 часов, поэтому он не станет слишком большим.

@Gortok: я знаю … но он был разработан с учетом IE6, и большинство пользователей (что-то вроде 90%) все еще используют IE6 при входе в это приложение … поэтому я никогда не видел необходимости рассматривать несколько открытых вкладок.

Solutions Collecting From Web of "обнаружить текущую вкладку"

Ну, это проблема дизайна, которая должна быть исправлена ​​как можно скорее. Быстрый и -серьезно-грязный способ справиться с этим, но это будет хранить IP-адрес клиента в $ _SESSION ( $ip=$_SERVER['REMOTE_ADDR']; ) Затем проверьте и не создайте новый сеанс или покажите предупреждение, если с этого адреса поступает несколько запросов. Это вызовет проблемы для посетителей, которые находятся по локальной сети, которые используют один и тот же IP-адрес. Я не могу больше ничего думать .. быстро (или грязно)

Я бы рекомендовал избегать использования $ _SESSION для хранения фильтров поиска и вместо этого кодировать их в строке поискового запроса (например, /search.php?filter1=val&filter2=val и т. Д.). Таким образом, каждое окно имеет уникальный URL-адрес и позволяет скрыть другое окно.

Я согласен с ответом arjun, но если вы должны использовать для этого сеансы, тогда вы можете создать массив, содержащий информацию для каждого поиска внутри сеанса PHP.

например, каждый раз, когда форма отправляется

 $key = md5(rand(time(), 1)); if (!isset($_SESSION['search_filters'])) { $_SESSION['search_filters'] = array(); } $filters = & $_SESSION['search_filters'][$key]; //store stuff $filters = array( 'something' => true ); 

то вы можете создать URL-адрес, например result.php? key = $ key, а затем получить данные по

 $filters = &$_SESSION['search_filters'][$_GET['key']]; if (!isset($filters)) die('cannot find search'); //do stuff with data print_r($filters); 

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

Никогда не отказывайте пользователю в простоте использования.

Два вопроса, которые я вижу:

  1. Вы запрещаете пользователю открывать веб-страницу на нескольких вкладках – что-то, что почти необходимо для веб-приложений.
  2. Эта проблема вызывает проблемы с дизайном.

Возможно, вам захочется рассмотреть возможность изменения переменной $_SESSION в singleton и не допускать ее перезаписывания несколькими просмотрами страниц.