2010-09-12 3 views
0

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

есть ли функция обратного вызова, чтобы позвонить по телефону php?

ответ

1

Вы можете написать PHP скрипт

<?php 
session_start(); 
$query = "DELETE FROM session_data WHERE session_id = '{$_SESSION['session_id']}'"; 
// in case you want to read this from ajax as json response 
echo mysq_query($query) ? "true" : "false"; 
session_destroy(); 
?> 

и этот сценарий с AJAX на событие uload с JQuery

$(window).unload(function() { 
    $.get('destroy_session.php', null, function(data, status) { 
     // ignore result 
    }); 
}); 
+0

Мое впечатление, что он уничтожает только переменные сеанса, а не данные в базе данных. что дело? – danny

+0

Я добавляю sql stagment – jcubic

1

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

Затем у вас есть cronjob или что-то подобное, очистите все сеансы, которые имеют временную метку последнего отчета, превышающую значение тайм-аута сеанса.

+0

, что я озабоченность в том, как это сделать после того как пользователь близко окно (возможно, никогда не вернется.). можно ли это сделать? – danny

+0

Тогда последний таймер отсылки назад будет старым, и cronjob очистит его. –

0

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

http://php.net/manual/en/function.session-set-save-handler.php

+0

вот и все, обработчик уничтожения кажется тем, что я искал. большое спасибо . – danny

+0

Добро пожаловать. Как это получилось? – JTP

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