All Projects → spatie → Laravel Referer

spatie / Laravel Referer

Licence: mit
Remember a visitor's original referer

Projects that are alternatives of or similar to Laravel Referer

Laravel Sitemap
Create and generate sitemaps with ease
Stars: ✭ 1,325 (+290.86%)
Mutual labels:  laravel, seo
Lara Head
Easily setup SEO in your laravel project with lara-head ❤️ @code4mk
Stars: ✭ 169 (-50.15%)
Mutual labels:  laravel, seo
Laravel Seo Tools
Laravel Seo package for Content writer/admin/web master who do not know programming but want to edit/update SEO tags from dashboard
Stars: ✭ 99 (-70.8%)
Mutual labels:  laravel, seo
Open Graph
Library that assists in building Open Graph meta tags
Stars: ✭ 112 (-66.96%)
Mutual labels:  laravel, seo
Laravel Link Checker
Check all links in a Laravel application
Stars: ✭ 253 (-25.37%)
Mutual labels:  laravel, seo
Lashop
Simple shop based on Laravel 7.3
Stars: ✭ 60 (-82.3%)
Mutual labels:  laravel, seo
Laravel Seo
SEO package made for maximum customization and flexibility
Stars: ✭ 130 (-61.65%)
Mutual labels:  laravel, seo
Laravel Missing Page Redirector
Redirect missing pages in your Laravel application
Stars: ✭ 378 (+11.5%)
Mutual labels:  laravel, seo
Laravelmetatags
The most powerful and extendable tools for managing SEO Meta Tags in your Laravel project
Stars: ✭ 226 (-33.33%)
Mutual labels:  laravel, seo
Seo Manager
Seo Manager Package for Laravel ( with Localization )
Stars: ✭ 192 (-43.36%)
Mutual labels:  laravel, seo
Seotools
SEO Tools for Laravel
Stars: ✭ 2,406 (+609.73%)
Mutual labels:  laravel, seo
Seo Helper
🔍 SEO Helper is a package that provides tools and helpers for SEO (Search Engine Optimization).
Stars: ✭ 262 (-22.71%)
Mutual labels:  laravel, seo
Laravel Robots Middleware
Enable or disable the indexing of your app
Stars: ✭ 259 (-23.6%)
Mutual labels:  laravel, seo
Laravel Paginateroute
Laravel router extension to easily use Laravel's paginator without the query string
Stars: ✭ 306 (-9.73%)
Mutual labels:  laravel, seo
Vuetified
Laravel Starter App Using Vue ,Vuetify, and InertiaJS.
Stars: ✭ 327 (-3.54%)
Mutual labels:  laravel
Laravel Forum
A minimal forum package designed for quick and easy integration in Laravel projects
Stars: ✭ 335 (-1.18%)
Mutual labels:  laravel
Seat
🌀✳️ SeAT: A Simple, EVE Online API Tool and Corporation Manager
Stars: ✭ 324 (-4.42%)
Mutual labels:  laravel
Awesome Laravel Education
A curated list of resources for learning about the Laravel PHP Framework
Stars: ✭ 327 (-3.54%)
Mutual labels:  laravel
Verta
تاریخ شمسی برای لاراول 5 , 6 , 7 , 8 تاریخ جلالی , تاریخ شمسی, پکیج شمسی, تبدیل تاریخ میلادی به شمسی
Stars: ✭ 335 (-1.18%)
Mutual labels:  laravel
Validator Docs
Validação de CPF, CNPJ, CNH, NIS, Título Eleitoral e Cartão Nacional de Saúde com Laravel.
Stars: ✭ 334 (-1.47%)
Mutual labels:  laravel

Remember a visitor's original referer

Latest Version on Packagist Software License Test Status Code Style Status Total Downloads

Remember a visitor's original referer in session. The referer is (highest priority first):

  • The utm_source query parameter
  • The domain from the request's Referer header if there's an external host in the URL
  • Empty

Support us

We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.

Installation

You can install the package via composer:

composer require spatie/laravel-referer

The package will automatically register itself in Laravel 5.5. In Laravel 5.4. you'll manually need to register the Spatie\Referer\RefererServiceProvider service provider in config/app.php.

You can publish the config file with:

php artisan vendor:publish --provider="Spatie\Referer\RefererServiceProvider"

Publishing the config file is necessary if you want to change the key in which the referer is stored in the session or if you want to disable a referer source.

return [

    /*
     * The key that will be used to remember the referer in the session.
     */
    'session_key' => 'referer',

    /*
     * The sources used to determine the referer.
     */
    'sources' => [
        Spatie\Referer\Sources\UtmSource::class,
        Spatie\Referer\Sources\RequestHeader::class,
    ],
];

Usage

To capture the referer, all you need to do is add the Spatie\Referer\CaptureReferer middleware to your middleware stack. In most configuration's, you'll only want to capture the referer in "web" requests, so it makes sense to register it in the web stack. Make sure it comes after Laravel's StartSession middleware!

// app/Http/Kernel.php

protected $middlewareGroups = [
    'web' => [
        // ...
        \Illuminate\Session\Middleware\StartSession::class,
        // ...
        \Spatie\Referer\CaptureReferer::class,
        // ...
    ],
    // ...
];

The easiest way to retrieve the referer is by just resolving it out of the container:

use Spatie\Referer\Referer;

$referer = app(Referer::class)->get(); // 'google.com'

Or you could opt to use Laravel's automatic facades:

use Facades\Spatie\Referer\Referer;

$referer = Referer::get(); // 'google.com'

The captured referer is (from high to low priority):

  • The utm_source query parameter, or:
  • The domain from the request's Referer header if there's an external host in the URL, or:
  • Empty

An empty referer will never overwrite an exisiting referer. So if a visitor comes from google.com and visits a few pages on your site, those pages won't affect the referer since local hosts are ignored.

Forgetting or manually setting the referer

The Referer class provides dedicated methods to forget, or manually set the referer.

use Referer;

Referer::put('google.com');
Referer::get(); // 'google.com'
Referer::forget();
Referer::get(); // ''

Changing the way the referer is determined

The referer is determined by doing checks on various sources, which are defined in the configuration.

return [
    // ...
    'sources' => [
        Spatie\Referer\Sources\UtmSource::class,
        Spatie\Referer\Sources\RequestHeader::class,
    ],
];

A source implements the Source interface, and requires one method, getReferer. If a source is able to determine a referer, other sources will be ignored. In other words, the sources array is ordered by priority.

In the next example, we'll add a source that can use a ?ref query parameter to determine the referer. Additionally, we'll ignore ?utm_source parameters.

First, create the source implementations:

namespace App\Referer;

use Illuminate\Http\Request;
use Spatie\Referer\Source;

class RefParameter implements Source
{
    public function getReferer(Request $request): string
    {
        return $request->get('ref', ''); 
    }
}

Then register your source in the sources array. We'll also disable the utm_source while we're at it.

return [
    // ...
    'sources' => [
        App\Referer\RefParameter::class,
        Spatie\Referer\Sources\RequestHeader::class,
    ],
];

That's it! Source implementations can be this simple, or more advanced if necessary.

Changelog

Please see CHANGELOG for more information what has changed recently.

Testing

composer test

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].