Zend_Session: определить, был ли сеанс изначально запущен или только обновлен - PullRequest
1 голос
/ 13 мая 2011

У меня проблема с 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 Ответ

2 голосов
/ 13 мая 2011

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

Не проблема:

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;
}
...