Laravel 4: файлы cookie для подсчета уникальных посетителей

#php #cookies #laravel #laravel-4

#php #файлы cookie #laravel #laravel-4

Вопрос:

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

  1. Создан прослушиватель событий:

    Event::listen('post.viewed', 'PostHandler@updatePostViewsAction');

  2. Создал PostHandler и updatePostViewsAction

     class PostHandler
    {
        public function handle()
        {
            // 
        }
    
        public function updatePostViewsAction( $post )
        {
            // Update view counter of post
            $post->views_count = $post->views_count   1;
            $post->save();
        }
    }
      

Это работает нормально, и количество просмотров успешно обновляется. Но позже я решил сделать так, чтобы просмотры учитывались однозначно. Для этого я попытался использовать cookies, т.е. создавать cookie на компьютере пользователя, всякий раз, когда он просматривает сообщение, и увеличивать views_count . Если пользователи вернутся снова и снова просмотрят публикацию, проверьте, доступен ли файл cookie, если он доступен, то не увеличивайте его views_count , в противном случае увеличьте это. Ниже показано, как я это реализовал:

 class PostHandler
{
    public function handle()
    {
        // 
    }

    public function updatePostViewsAction( $post )
    {
        if ( !Cookie::get('post_viewed') ) {
            // Update view counter of post
            $post->views_count = $post->views_count   1;
            $post->save();
            Cookie::forever('post_viewed', true);
        }
    }
}
  

Но, похоже, это не работает, так как количество просмотров увеличивается каждый раз. Кто-нибудь, пожалуйста, может сказать мне, что я здесь делаю не так?

Комментарии:

1. Вы уверены, что файл cookie действительно создан? Используйте инструменты разработчика вашего браузера для проверки.

Ответ №1:

Чтобы сохранить файл cookie с помощью Laravel, вам необходимо отправить его в ответ. Однако вы можете обойти это, отправив файл cookie в очередь.

 public function updatePostViewsAction( $post )
{
    if ( !Cookie::get('post_viewed') ) {
        // Update view counter of post
        $post->views_count = $post->views_count   1;
        $post->save();
        // Create a cookie before the response and set it for 30 days
        Cookie::queue('post_viewed', true, 60 * 24 * 30);
    }
}
  

Источник из Laravel Docs http://laravel.com/docs/requests#cookies:

Постановка файла cookie в очередь для следующего ответа

Если вы хотите установить файл cookie перед созданием ответа, используйте метод Cookie::queue(). Файл cookie будет автоматически прикреплен к окончательному ответу вашего приложения.