2014-09-15 2 views
0

Я просмотрел некоторые сообщения с похожими заголовками checking status of session with session id и How to tell if a session is active?, но они не кажутся конкретными для того, чего я пытаюсь достичь.Проверка состояния сеанса с помощью идентификатора сеанса

Я создаю тележку, в которой пользователи могут добавить ее независимо от того, вошли ли они в систему или нет - с помощью $_SESSION и session_id().

Добавление элементов в корзину Добавить записи в таблицу покупок с идентификатором сеанса.

Короче говоря, как я могу определить из списка идентификаторов сеанса, какие сеансы активны и какие нет (для использования в crontab), чтобы я мог удалять избыточные элементы из таблицы корзины покупок в базе данных?

+0

u хотите как активные, так и неактивные в сеансе? –

+0

Ну, технически мне нужно только знать, какие из них неактивны, поэтому я могу удалить их из БД. – PavKR

+1

Я не уверен, что вы можете получить список активных/истекших сессий в PHP. Но это то, что вы можете сделать: как только корзина будет инициализирована, сохраните идентификатор сеанса в таблице (я думаю, вы уже это делаете) ** с меткой времени ** (я думаю, вы еще не делаете _that_). И всякий раз, когда пользователь загружает обновление страницы, отметка времени (если пользователь тратит много времени на странице, вы можете отправлять вызовы ajax для периодического обновления сеанса). Определите порог для старых сеансов (например, 2 часа), а затем удалите сеансы старше этого порога (возможно, используя задание cron) из базы данных. Дай мне знать, если это работает. – Krumia

ответ

0

Вы можете сделать это, используя SessionHandler, если у вас есть достаточные привилегии. (Работает в PHP> 5.4.0)

class MySessionHandler extends SessionHandler 
{  
    public function __construct() 
    { 
     // database initialization code 
    } 

    public function destroy($id) 
    { 
     $ret = parent::destroy($id); 
     // database uninitialization code 
     return $ret; 
    } 
} 

Затем в коде:

ini_set('session.save_handler', 'files'); 
$handler = new MySessionHandler(); 
session_set_save_handler($handler, true); 
session_start(); 

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


Однако, поскольку вы строите корзину покупок, было бы проще просто сохранить информацию о корзине в переменных сеанса.

+0

Хм, интересно - у меня есть полный доступ к серверу, поэтому я отдам это. Единственная причина, по которой я не хочу использовать только сеансы, - это то, что я хочу, чтобы член мог войти в свою учетную запись и все еще иметь элементы, которые они выбрали в своей корзине покупок. – PavKR

+0

@thePav: если вы храните его в БД или в переменных сеанса, то в любом случае вам придется делать ваши сессии не истекающими в течение длительного времени. – Krumia

+0

Для членов, не являющихся членами, тележка будет основана на сеансах (с истечением времени, равным примерно 2 часам бездействия), для участников не будет истечения срока действия корзины, поскольку данные будут находиться в базе данных, прикрепленной к их идентификатор пользователя (поэтому для входа в систему членам не потребуется сеанс тележки). – PavKR

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