0

Web サイトのヒット カウンターを作成しようとしており、そのための次のコードを開発しました。次のコードは、ホームページの Codeigniter のメイン コントローラーにのみ含めました。

最初はコードが正常に機能していると思っていましたが、ページを閲覧し続けないと、再びホームページにアクセスしてもデータが更新されないことがわかりました。たとえば、初めてホームページにアクセスするとデータが更新されますが、10 秒後にページを更新してもデータは更新されません。しかし、10秒間更新し続けると、機能します。

ページを何度も閲覧したり、ホームページを更新したりせずにデータを更新する方法を教えてください。

ありがとう :)

function __construct() {

    parent::__construct();

    // Visitor Counter
    if (!$this->session->userdata('timeout')) {

        $out = time() + 10; // I will change it to $out = time() + 60*60; later 
        $this->session->set_userdata('timeout', $out);
        mysql_query("UPDATE cane_visitor_counter SET visitor_stat = visitor_stat+1 
              WHERE id = '1'");
    } else {
        $timeout_time = $this->session->userdata('timeout');
        if (time() > $timeout_time) {

            $this->session->set_userdata(array('timeout' => ''));
            $this->session->sess_destroy();
        }
    }
}

編集

私が達成しようとしているのは、ユーザーが初めて Web ページにアクセスしたときに、データベースを更新したいということです。10 秒以内に (目的など)、訪問者が再びホームページにアクセスした場合、データベースは更新されません。しかし、10 秒後に彼が再びホームページにアクセスした場合、データベースを更新したいと思います。

ありがとう :)

4

1 に答える 1

2

あなたのコードは、「セッションにタイムアウトがない場合は、カウントを更新してください」と言っています。「セッションにタイムアウトがない場合、またはタイムアウトがあるが古い場合は、カウントを更新してください」と言う必要があります。

function __construct() {

    parent::__construct();

    // Visitor Counter
    if (!$this->session->userdata('timeout') || $this->session->userdata('timeout') < time()) {
        $this->session->set_userdata('timeout', time() + 10);
        mysql_query("UPDATE cane_visitor_counter SET visitor_stat = visitor_stat + 1 WHERE id = 1");
    }

}   

私は CodeIgniter のユーザーではないので、あなたが CodeIgniter のセッション機能を正しく使用していると仮定しています。私はそれらを同じように使用しました。

于 2012-08-23T21:03:02.450 に答える