2010-02-03 3 views
0

-им создать две таблицы (в MySQL) с именемудалить информацию из тузд таблицы, когда пользователь закрыть его браузер

  1. table_temp_guest
  2. table_temp_order

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

теперь мой вопрос:

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

дополнительный вопрос: есть ли другой способ сделать весь этот процесс каким-либо другим способом.

ответ

4

Вы не можете обнаружить, когда пользователь закрывает браузер или создает новый адрес. Вам в основном нужно иметь «тайм-аут», как и остальные веб-сайты.

+0

и ho мы управляем тайм-аутом? пожалуйста, скажите мне – diEcho

+0

Используйте поле «last_updated_at» в любой таблице и периодически (скажем, один раз в день) удаляйте все записи с записями last_updated_at далеко в прошлом. –

2

Есть событие window.onunload, которое вы можете обнаружить с помощью javascript, но оно не поддерживается повсеместно, и оно обнаруживает . Окно закрывается, а браузер закрывается.

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

+0

, но в то же время многие гости находятся на сайте с другого компьютера, а затем как я могу удалить эту информацию конкретного пользователя по последней доступной дате? – diEcho

+0

Если несколько пользователей используют компьютер одновременно, не закрывая окно браузера (или один за другим)? На самом деле это не так. Сеанс php уникален для посещения и браузера. Если вы посетите амазонку, добавьте кучу вещей в свою корзину, а затем уйдете от компьютера, следующий человек все равно сможет увидеть ваш (незаполненный) заказ. Вот почему все говорят «Не забудьте закрыть браузер, когда закончите» на общедоступных компьютерах. У вас может быть ссылка для выхода гостей, которая уничтожает данные сеанса. – davethegr8

+0

пользователь закрывает браузер, но теперь выйдет из строя дорогой – diEcho

1

Тайм-аут будет лучшим методом.

Запишите последнее активное время в гостевой таблице. Периодически выполняйте задание cron на сеансах очистки веб-сервера, которые превышают максимальное время, которое вы хотите разрешить.

Будьте осторожны с количеством времени, которое вы разрешаете. Вы должны разрешать медленным пользователям и удаленным соединениям.

+0

Я не знаю, как установить cronjob в php, будет ли вы рассказать мне процесс или простой сайт-учебник? спасибо – diEcho

+2

Вы не можете установить их в php; вам нужно будет написать shell-скрипт (для любой оболочки, используемой вашим конкретным сервером), и вставить в cron-список для этого сервера. Если вам нужна помощь в этом, я бы рекомендовал опубликовать еще один вопрос о работе cron и о том, как писать записи. – macabail

+0

Некоторые хосты имеют довольно простой интерфейс для ввода заданий. Все зависит от вашего хозяина. Вы можете написать сценарий в php и вызвать его с/path/to/php yourscript.php в задании. В большинстве случаев пути к определенным исполняемым файлам публикуются веб-хостом. Если у вас есть доступ к оболочке, это проще, потому что вы сами определяете путь. Я думаю, что phpinfo() даже показывает исполняемый путь. – Buggabill

0

Также вы можете попробовать создать сценарий, который будет выполняться на стороне клиента и выполнить ping-сервер, чтобы вы знали, что скрипт не пинговал какое-то время, пользователь закрыл браузер. Сказанное, я согласен с предыдущими плакатами, процедура тайм-аута/очистки будет лучше всего.

Для этого вы добавили бы поле ModifiedDate в свои таблицы, вы можете установить его как поле «ON UPDATE» для удобства использования, а затем просто удалить все записи, у которых есть поле ModifiedDate старше, чем несколько часов.

1

Если вы используете session_id() в любом случае (я думаю, это то, что вы подразумеваете под идентификатором сеанса), просто используйте сеансы php. PHP автоматически делает их недействительными, и вам не нужны эти две таблицы (вы можете хранить все, что вам нужно, в $ _SESSION).

Невозможно проверить, не был ли броузер не закрыт, на который можно положиться.

Если вы не хотите изменять способ работы своего проекта, просто добавьте созданное поле в таблицы и установите его на текущее время(), когда вы «видите» конкретного пользователя. Затем настройте cronjob, который удаляет все записи из этой таблицы, которые старше определенного тайм-аута.

+0

по заданию cron мы можем удалить эту деталь конкретного пользователя (используя идентификатор сеанса) или что задание cron пустое стол? пожалуйста, предложите мне сайт sgood для работы cron в окнах (Xampp) – diEcho

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