繁体   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