Laravel session data not sticking across page loads

Rubens Mariuzzo's answer is very good. I just want to add that if you need the data to be stored immediately you could use the save method:

Session::put('progress', '5%');
Session::save();

The problem is because you are killing the script before Laravel finishes its application lifecycle, so the values put in session (but not yet stored) got killed too.

When a Laravel application lifecycle starts, any value put in Session are not yet stored until the application lifecycle ends. That is when any value put in Session will be finally/really stored.

If you check the source you will find the same aforementioned behavior:

 public function put($key, $value)
 {
     $all = $this->all();

     array_set($all, $key, $value);

     $this->replace($all);
 }

If you want to test it, do the following:

  1. Store a value in session without killing the script.

    Route::get('test', function() {
        Session::put('progress', '5%');
        // dd(Session::get('progress'));
    });
    
  2. Retrieve the value already stored:

    Route::get('test', function() {
        // Session::put('progress', '5%');
        dd(Session::get('progress'));
    });