Laravel 4:独特访客数量的Cookie

时间:2014-07-03 11:32:07

标签: php cookies laravel laravel-4

我正在创建一个简单的博客,用户可以添加,更新和查看帖子。我在帖子中实现了观看次数计数功能,该帖子显示了帖子上的观看次数。为此,我所做的是:

  1. 创建了一个事件监听器:

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

  2. 创建了PostHandlerupdatePostViewsAction

    class PostHandler
    {
        public function handle()
        {
            // 
        }
    
        public function updatePostViewsAction( $post )
        {
            // Update view counter of post
            $post->views_count = $post->views_count + 1;
            $post->save();
        }
    }
    
  3. 这是工作正常,并且视图计数已成功更新。但稍后我决定使视图得到唯一计数。为此,我有< strong>尝试使用Cookie 即在用户计算机上创建 Cookie ,只要他查看帖子并增加views_count 。如果用户再次回来并再次查看帖子,请检查是否有可用的Cookie ,如果可用则不要增加{ {1}} 否则增加。下面是我如何实现这个:

    views_count

    但它似乎不起作用,因为每次都会增加views_count 。谁能告诉我,我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

为了使用Laravel保存cookie,您需要将其发送给响应。但是,您可以通过将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文档的来源http://laravel.com/docs/requests#cookies

  

为下一个响应排队Cookie

     

如果您想在创建响应之前设置cookie,请使用Cookie :: queue()方法。 cookie将自动附加到您的应用程序的最终响应中。