Сеанс Laravel 5 исчезает после перенаправления

В 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

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

Вызывается ли метод handleGatewayResponse серверами PayPal? Если это так, это нормально, что ваш сеанс пуст, поскольку это 2 разных клиента (один - пользователь, а другой - PayPal)

Adrien 06.03.2019 17:35
handleGatewayResponse — это функция, обрабатывающая ответ, который перенаправляется шлюзом PayPal после успешной оплаты. Но я все еще думаю, что сеанс должен сохраняться с приложением, верно? так как это не flash session.
user7747472 06.03.2019 17:37

Можете ли вы добавить код из $response->redirect(); к своему вопросу и попробовать return $response->redirect();

Remul 06.03.2019 17:42

Вы можете попробовать использовать что-то вроде этого: return redirect()->route('ваш маршрут', $response);

mindmaster 06.03.2019 17:46

@Remul $response->redirect(); — это метод paypal пакета SDK. Это функция шлюза по умолчанию. Я использую этот пакет github.com/thephpleague/omnipay

user7747472 06.03.2019 17:48

Какой у вас драйвер сеанса в .env?

faizan.sh 06.03.2019 18:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
6
3 238
1

Ответы 1

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

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

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

Означает ли это, что PayPal должен перенаправить на незащищенный маршрут, с которого пользователь должен продолжить навигацию по сайту? Пропустит ли это иллюзию пустой сессии?

I Want Answers 15.01.2020 08:31

Если я правильно понял вопрос OP, функция handleGatewayResponse вызывается серверами Paypal после завершения транзакции для подтверждения статуса платежа. Таким образом, есть два совершенно разных сеанса: один между вашим сервером и клиентом и один между вашим сервером и Paypal. Должен быть уникальный идентификатор платежа, отправленный Paypal на сервер и известный клиентскому API, чтобы связать оба

Adrien 18.01.2020 20:52

Другие вопросы по теме