Zend_Session: определить, был ли сеанс изначально запущен или только обновлен
У меня проблема с Zend_Session. Мне нужно знать, был ли сеанс для этого пользователя изначально запущен в первый раз или он был только что обновлен в текущем запросе.
Мне нужно знать это для статистики. Если сеанс был инициализирован (то есть пользователь впервые посещает мое приложение), я хочу сохранить реферер запроса в некоторой db-таблице. Это, конечно, я хочу сделать только для первого запроса в этой сессии.
В руководстве рассказывается о методах Zend_Session::isStarted()
а также Zend_Session::sessionExists()
, Но похоже, что оба метода работают только для текущего запроса (то есть, если я использую, он возвращает true Zend_Session::start()
где-то в моем приложении).
Мой подход был следующий: я пытался переопределить Zend_Session::start()
вставить статистические данные в мою базу данных.
// Somewhere in my bootstrap:
My_Session::start();
// This is my class (eased up)
class My_Session extends Zend_Session
{
public static function start($options)
{
parent::start($options);
if(/* Here I need the condition to test, if it was the initial session-starting... */)
{
$table = new Zend_Db_Table(array('name' => 'referer'));
$row = $table->createRow();
$row->url = $_SERVER['HTTP_REFERRER'];
$row->ip = $_SERVER['REMOTE_ADDR'];
// ... some columns ...
$row->save();
}
}
}
У кого-нибудь есть идеи?
1 ответ
Мне нужно знать, был ли сеанс для этого пользователя изначально запущен в первый раз или он был только что обновлен в текущем запросе.
Не проблема:
Zend_Session::start();
$my_logger = new Zend_Session_Namespace('my_logger');
if(isset($my_logger->has_already_visited_app) && $my_logger->has_already_visited_app) {
// this is not the first request
} else {
// this is the first request, do something here
// make sure to add the following
$my_logger->has_already_visited_app = true;
}