Php Zend_会话:确定会话是最初启动的还是刚刚更新的

Php Zend_会话:确定会话是最初启动的还是刚刚更新的,php,zend-framework,session,zend-session,Php,Zend Framework,Session,Zend Session,我对Zend_课程有问题。我需要知道,这个用户的会话是第一次启动的,还是在当前请求中刚刚更新的 我需要知道统计数据。如果会话已初始化(意味着用户第一次访问我的应用程序),我希望将请求的引用存储在某个db表中。当然,我只想在这个会话中对第一个请求执行此操作 本手册介绍了方法Zend\u Session::isStarted()和Zend\u Session::sessionExists()。但这两种方法似乎只适用于当前请求(这意味着如果在我的应用程序中的某个地方使用Zend_Session::st

我对Zend_课程有问题。我需要知道,这个用户的会话是第一次启动的,还是在当前请求中刚刚更新的

我需要知道统计数据。如果会话已初始化(意味着用户第一次访问我的应用程序),我希望将请求的引用存储在某个db表中。当然,我只想在这个会话中对第一个请求执行此操作

本手册介绍了方法
Zend\u Session::isStarted()
Zend\u Session::sessionExists()
。但这两种方法似乎只适用于当前请求(这意味着如果在我的应用程序中的某个地方使用
Zend_Session::start()
,则返回true)

我的做法如下: 我试图重写Zend_Session::start(),将统计数据插入我的db表

// 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();
        }
    }
}
有人知道吗

我需要知道,这个用户的会话是第一次启动的,还是在当前请求中刚刚更新的

没问题:

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

检查用户是否已在数据库中?如果没有,请添加它。编辑:啊,你只存储url和ip我看到:)是的,我也有这个想法。但这样我就必须在这个表中保存标识用户的唯一条件。我认为ip不可靠,因此会话id本身可能不可靠。但事实上,我并不想将会话ID存储在我的stats表中。所以我真的想找到另一种方法。如果绝对不可能,我当然会按照你的建议去做!谢谢。我也想过类似的事情。我想,这是做类似事情的唯一方法。我也在考虑覆盖
Zend\u Session\u SaveHandler\u DbTable
的方法。当它执行插入查询以最初存储会话时,还将其存储在统计表中。但是快,我想我会用你的方法。@faileN:如果你想依赖会话,我认为这是一种方法。也许你应该依赖饼干。(坦率地说,我认为在定义问题之前,您更关注的是技术解决方案:))关于
Zend_Session\u SaveHandler\u DbTable
:如果您将所有会话存储在数据库中,那么您的关注点是混合的:统计与会话管理。这在将来可能会有问题,因为会在两个不相关的主题之间引入耦合。后续问题:你是在试图模仿谷歌分析、Piwik或其他东西的行为吗?那么“模仿谷歌分析”是什么意思。让我们说“以某种方式”,但要简单得多。我只是想知道,有多少用户访问一个页面,他们来自哪里。无论如何,谢谢你,我实现了你的解决方案,在会话中使用一个键来确定这是否是第一次访问。关于“模仿谷歌”,我指的是他们跟踪独特访客的功能-很抱歉不清楚。不管怎样,我希望这对你有用!