簡體   English   中英

Laravel 5 Session 從支付網關重定向時隨機丟失

[英]Laravel 5 Session Randomly Lost when redirected from payment gateway

我有一個奇怪的回調問題。 我有一條被支付提供商回調的路線,並且發生了幾件奇怪的事情。

另一台服務器上的相同應用程序沒有這些問題。 我進行了一次遷移,所有參數都設置為相同,因此 Laravel 和 Php 的配置是相同的,但仍然隨機一些客戶在被提供商重定向回時沒有 session。

即使沒有 session,我也設法處理了回調,直到我弄清楚這個問題的原因,但奇怪的事情也發生了,通過郵件發送的某些刀片 / pdf 的翻譯也顯示為鍵而不是它們的值。

我試過弄亂 session.php 配置關於相同站點,生命周期等,即使以前的服務器沒有給我任何這些問題,具有相同的值; 但沒有任何幫助。

我還沒有嘗試過的另一件事是將 web 中間件設置為這條路線,但正如我所說,我試圖操縱從來沒有問題的東西。

php.ini

Session Support => enabled
session.auto_start => Off => Off
session.cache_expire => 180 => 180
session.cache_limiter => nocache => nocache
session.cookie_domain => no value => no value
session.cookie_httponly => no value => no value
session.cookie_lifetime => 0 => 0
session.cookie_path => / => /
session.cookie_samesite => no value => no value
session.cookie_secure => 0 => 0
session.gc_divisor => 1000 => 1000
session.gc_maxlifetime => 1440 => 1440
session.gc_probability => 0 => 0
session.lazy_write => On => On
session.name => PHPSESSID => PHPSESSID
session.referer_check => no value => no value
session.save_handler => files => files
session.save_path => /var/lib/php/sessions => /var/lib/php/sessions
session.serialize_handler => php => php
session.sid_bits_per_character => 5 => 5
session.sid_length => 26 => 26
session.upload_progress.cleanup => On => On
session.upload_progress.enabled => On => On
session.upload_progress.freq => 1% => 1%
session.upload_progress.min_freq => 1 => 1
session.upload_progress.name => PHP_SESSION_UPLOAD_PROGRESS => PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix => upload_progress_ => upload_progress_
session.use_cookies => 1 => 1
session.use_only_cookies => 1 => 1
session.use_strict_mode => 0 => 0
session.use_trans_sid => 0 => 0
session.trans_sid_hosts => no value => no value
session.trans_sid_tags => a=href,area=href,frame=src,form= => a=href,area=href,frame=src,form=
XDG_SESSION_TYPE => tty
XDG_SESSION_CLASS => user
XDG_SESSION_ID => 4663
DBUS_SESSION_BUS_ADDRESS => unix:path=/run/user/1000/bus
$_SERVER['XDG_SESSION_TYPE'] => tty
$_SERVER['XDG_SESSION_CLASS'] => user
$_SERVER['XDG_SESSION_ID'] => 4663
$_SERVER['DBUS_SESSION_BUS_ADDRESS'] => unix:path=/run/user/1000/bus

配置/會話.php

...
'driver' => 'file',
'lifetime' => 1200,
'path' => '/',
'secure' => false,
'samesite' => null,
'expire_on_close' => false, 

這可能是什么原因? 我錯過了什么?

為了實現可靠的通信,而不依賴於發現或了解session 的問題所在,因為有一天會有很多事情發生; 我以不同的方式進行了處理,但是在生產中采用了第三種方法,當我在更平靜的水域時,我的想法是切換到第二種方法:

  1. 設置一些中間件,它會要求用戶登錄然后重定向到confirmation route

  2. 設置另一個預登陸頁面,客戶確認操作,然后從您的頁面重定向到confirmation route ,session 將再次附加

  3. 在不涉及用戶交互的情況下在內部解決此問題:當提供者調用confirmation route時,使用一些交換前的散列密鑰,以便當您被回調時,您可以使用這些密鑰查找連接到該付款的用戶,登錄該用戶並設置您通常可能需要的任何 Session 數據,以使confirmation route正常工作。 [通信必須安全]

我學到的最重要的規則:

永遠不要期望支付提供商不會弄亂您的 session

希望這些對其他人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM