Сессия Laravel 5 исчезает после перенаправления - PullRequest
1 голос
/ 06 марта 2019

В laravel 5.7 сеанс исчезает после перенаправления на другую страницу.Я работаю над приложением, в котором я подталкиваю пользователей на страницу платежного шлюза, перед которой я сохраняю данные в сеансе согласно laravel документация .После возвращения из платежного шлюза, когда я пытаюсь получить этот сеанс, он возвращается пустым.Может кто-нибудь, пожалуйста, скажите мне, как я могу решить эту проблему.

Мой код выглядит примерно так

public function processPayment(Request $request)
 {
    //...........
    session()->put('order_checkout_data', [
        'gateway' => 'paypal',
        'data' => $paypalData
    ]);

    //$request->session()->save();  <!-- This i tried after reading some solution but didnt help

    //print_r(session('order_checkout_data')) <!-- I can see the session here

    $paypal = new PayPal();
    $response = $paypal->purchase($paypalData);

    if ($response->isRedirect()) {
        $response->redirect(); //This is where redireting to paypal
            }
}

public function handleGatewayResponse(Request $request){
    print_r(session('order_checkout_data')); //No data
}

Я также пытался использовать глобальную функцию сеанса и фасад, как эти

Session::put('order_checkout_data', [
            'gateway' => 'paypal',
            'data' => $paypalData
        ])

, а также

session(['order_checkout_data'=>[
            'gateway' => 'paypal',
            'data' => $paypalData
        ]])

Но не имеет значения.Моим настройкам env нравится это

SESSION_DRIVER=file
SESSION_LIFETIME=360

Я пытался просмотреть некоторые ссылки с похожей проблемой, но это не помогло.Вот ссылки, по которым я перешел:

1 Ответ

0 голосов
/ 06 марта 2019

Когда вы используете сеансы, куки-файл SESSION_ID (или аналогичный) отправляется в браузер, чтобы узнать, какой сеанс связан с каждым запросом.

Ваш processPayment метод вызывается после запроса от пользователя (это, безусловно, ваш js-скрипт, который выдает запрос, но он тот же), и вы сохраняете данные в сеансе, связанном с этим конкретным пользователем.

После того, как PayPal завершил свою работу, он отправляет запрос на URL обратного вызова. Этот запрос выполняется PayPal, но не вашим пользователем, для которого вы сохранили данные. PayPal не имеет представления о файле cookie сеанса, поэтому Laravel начинает новый пустой сеанс.

...