1

Zend_Sessionに問題があります。このユーザーのセッションが最初に開始されたのか、それとも現在のリクエストで更新されたばかりなのかを知る必要があります。

私は統計のためにそれを知る必要があります。セッションが初期化された場合(つまり、ユーザーが初めて私のアプリにアクセスした場合)、リクエストのリファラーをいくつかのデータベーステーブルに保存したいと思います。もちろん、これはこのセッション内の最初のリクエストに対してのみ実行したいと思います。

Zend_Session::isStarted()マニュアルでは、方法とについて説明していますZend_Session::sessionExists()。ただし、どちらの方法も現在のリクエスト内でのみ機能するようです(つまりZend_Session::start()、アプリのどこかで使用するとtrueが返されます)。

私のアプローチは次のとおりZend_Session::start()です。db-tableにstatistic-dataを挿入するためにオーバーライドしようとしました。

// 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();
        }
    }
}

誰かが何か考えを持っていますか?

4

1 に答える 1

2

このユーザーのセッションが最初に開始されたのか、それとも現在のリクエストで更新されたのかを知る必要があります。

問題ない:

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;
}
于 2011-05-13T19:54:12.777 に答える