laravel-referer

Remember a visitor's original referer

Github stars Tracking Chart

Remember a visitor's original referer

Latest Version on Packagist
Software License
Build Status
Quality Score
StyleCI
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

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 freek@spatie.be instead of using the issue tracker.

Postcardware

You're free to use this package, but if it makes it to your production environment we highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using.

Our address is: Spatie, Samberstraat 69D, 2060 Antwerp, Belgium.

We publish all received postcards on our company website.

Credits

Support us

Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website.

Does your business depend on our contributions? Reach out and support us on Patreon.
All pledges will be dedicated to allocating workforce on maintenance and new awesome stuff.

License

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

Overview

Name With Ownerspatie/vue-save-state
Primary LanguageJavaScript
Program languagePHP (Language Count: 1)
Platform
License:MIT License
Release Count1
Last Release Name1.1.0 (Posted on )
First Release Name1.1.0 (Posted on )
Created At2016-10-28 13:06:41
Pushed At2022-03-21 12:45:21
Last Commit At2022-03-21 13:45:21
Stargazers Count242
Watchers Count12
Fork Count23
Commits Count58
Has Issues Enabled
Issues Count14
Issue Open Count0
Pull Requests Count6
Pull Requests Open Count0
Pull Requests Close Count5
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private
To the top