Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

chintan's avatar
Level 13

Laravel 5.2 session is created on each redirect.

I am using file as session driver. I an using facebook login using socialite. Once the user is found in uers table I am using Auth::login($user) for logging in . Then I redirect it using return redirect('doctor/dashboard')

Every time a new session is created for the request . Socialroute.php

<?php
// Route::group(['middleware' => 'web'], function () {
    //Facebook
    Route::get('auth/facebook/redirect', 'SocialAuthController@authFacebookRedirect');
    Route::get('auth/facebook/callback', 'SocialAuthController@authFacebookCallback');

    //Google
    Route::get('auth/google/redirect', 'SocialAuthController@authGoogleRedirect');
    Route::get('auth/google/callback', 'SocialAuthController@authGoogleCallback');
// }); ?>

SocialController.php

<?php
 $userCheck = User::where('user_name',$user['email'])->first();
  Auth::login($userCheck);
return redirect('doctor/dashboard');

DoctorRoute.php

<?php
 Route::group(['middleware' => ['auth']], function () {
   Route::get('doctor/dashboard', function () {
        // Log::info('in routes');
        // Log::info(auth()->user());
         return view('doctor.default');
     });
 });

Http/Kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Session\Middleware\StartSession::class,
       
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
                \App\Http\Middleware\EncryptCookies::class,

                \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                
                \Illuminate\Session\Middleware\StartSession::class,

                \Illuminate\View\Middleware\ShareErrorsFromSession::class,

                \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'auth' => [
            \App\Http\Middleware\Authenticate::class,
         ],

        'api' => [
            'throttle:60,1',
        ],
    ];
    // \App\Http\Middleware\VerifyCsrfToken::class,

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}
0 likes
7 replies
d3xt3r's avatar

Every time a new session is created for the request

Which request?

chintan's avatar
Level 13

@d3xt3r I mean redirect. Every time when redirect() is called a new session is created.

d3xt3r's avatar

It should not be unless you are creating it. I suspect it has to do with you using Auth::login() everytime. Before login in check if there's already an authenticated session for same user, in which case do not login and redirect.

$userCheck = User::where('user_name',$user['email'])->first();
if(Auth::guest() || Auth::user()->id !== $userCheck->id) {
    Auth::login($userCheck);
}
return redirect('doctor/dashboard');

chintan's avatar
Level 13

@d3xt3r Nope. Still the same. After keeping if condition it still redirects to login page since no authenticated user found in the redirect.

d3xt3r's avatar

What is \Illuminate\Session\Middleware\StartSession::class, doing in global middleware ?

I am not sure what you have done with it .... No cookies ?

chintan's avatar
Level 13

Sorry that is not there. I am using files as session drivers.

Here's the new kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
       
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
                \App\Http\Middleware\EncryptCookies::class,

                \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                
                \Illuminate\Session\Middleware\StartSession::class,

                \Illuminate\View\Middleware\ShareErrorsFromSession::class,

                \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'auth' => [
            \App\Http\Middleware\Authenticate::class,
         ],

        'api' => [
            'throttle:60,1',
        ],
    ];
    // \App\Http\Middleware\VerifyCsrfToken::class,

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}
chintan's avatar
chintan
OP
Best Answer
Level 13

Solved. Just needed to change domain in session.php. Here's is the new code for session.php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Session Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default session "driver" that will be used on
    | requests. By default, we will use the lightweight native driver but
    | you may specify any of the other wonderful drivers provided here.
    |
    | Supported: "file", "cookie", "database", "apc",
    |            "memcached", "redis", "array"
    |
    */

    'driver' => env('SESSION_DRIVER', 'cookie'),

    /*
    |--------------------------------------------------------------------------
    | Session Lifetime
    |--------------------------------------------------------------------------
    |
    | Here you may specify the number of minutes that you wish the session
    | to be allowed to remain idle before it expires. If you want them
    | to immediately expire on the browser closing, set that option.
    |
    */

    'lifetime' => 3600,

    'expire_on_close' => false,

    /*
    |--------------------------------------------------------------------------
    | Session Encryption
    |--------------------------------------------------------------------------
    |
    | This option allows you to easily specify that all of your session data
    | should be encrypted before it is stored. All encryption will be run
    | automatically by Laravel and you can use the Session like normal.
    |
    */

    'encrypt' => false,

    /*
    |--------------------------------------------------------------------------
    | Session File Location
    |--------------------------------------------------------------------------
    |
    | When using the native session driver, we need a location where session
    | files may be stored. A default has been set for you but a different
    | location may be specified. This is only needed for file sessions.
    |
    */

    'files' => storage_path('framework/sessions'),

    /*
    |--------------------------------------------------------------------------
    | Session Database Connection
    |--------------------------------------------------------------------------
    |
    | When using the "database" or "redis" session drivers, you may specify a
    | connection that should be used to manage these sessions. This should
    | correspond to a connection in your database configuration options.
    |
    */

    'connection' => null,

    /*
    |--------------------------------------------------------------------------
    | Session Database Table
    |--------------------------------------------------------------------------
    |
    | When using the "database" session driver, you may specify the table we
    | should use to manage the sessions. Of course, a sensible default is
    | provided for you; however, you are free to change this as needed.
    |
    */

    'table' => 'sessions',

    /*
    |--------------------------------------------------------------------------
    | Session Sweeping Lottery
    |--------------------------------------------------------------------------
    |
    | Some session drivers must manually sweep their storage location to get
    | rid of old sessions from storage. Here are the chances that it will
    | happen on a given request. By default, the odds are 2 out of 100.
    |
    */

    'lottery' => [2, 100],

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Name
    |--------------------------------------------------------------------------
    |
    | Here you may change the name of the cookie used to identify a session
    | instance by ID. The name specified here will get used every time a
    | new session cookie is created by the framework for every driver.
    |
    */

    'cookie' => 'khsession',

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Path
    |--------------------------------------------------------------------------
    |
    | The session cookie path determines the path for which the cookie will
    | be regarded as available. Typically, this will be the root path of
    | your application but you are free to change this when necessary.
    |
    */

    'path' => '/',

    /*
    |--------------------------------------------------------------------------
    | Session Cookie Domain
    |--------------------------------------------------------------------------
    |
    | Here you may change the domain of the cookie used to identify a session
    | in your application. This will determine which domains the cookie is
    | available to in your application. A sensible default has been set.
    |
    */

    'domain' => null,

    /*
    |--------------------------------------------------------------------------
    | HTTPS Only Cookies
    |--------------------------------------------------------------------------
    |
    | By setting this option to true, session cookies will only be sent back
    | to the server if the browser has a HTTPS connection. This will keep
    | the cookie from being sent to you if it can not be done securely.
    |
    */

    'secure' => false,

    /*
    |--------------------------------------------------------------------------
    | HTTP Access Only
    |--------------------------------------------------------------------------
    |
    | Setting this value to true will prevent JavaScript from accessing the
    | value of the cookie and the cookie will only be accessible through
    | the HTTP protocol. You are free to modify this option if needed.
    |
    */

    'http_only' => true,

];

Please or to participate in this conversation.