【发布时间】:2021-08-13 22:57:14
【问题描述】:
我有一个 Laravel 网站,该网站重定向到支付提供商(外部第三方网站)。当用户完成付款后,他们会通过 POST 请求重定向回我的网站。
我遇到的问题是用户返回确认页面时会话丢失。
我想知道这是否是 PHP 的一般行为,但它似乎是 Laravel 特有的。
我检查了我的 sessions.php 配置文件,可以确认以下设置为 'expire_on_close' => false,。
我在下面创建了一个非常基本的问题示例
我的网站(预售)
控制器
public function redirect()
{
$user = Auth::user();
dd($user); // returns User model;
redirect()->away('http://www.example.com');
}
支付提供商网站
请注意,请求是通过浏览器中的应用程序发送的,而不是回调。也没有按钮。我只是想将 POST 演示回 Laravel 站点。
<html>
<head></head>
<body>
<form method="POST" action="http://www.example.com/payment/confirmation">
<input type="submit">
</form>
</body>
</html>
我的网站(售后)
路线
Route::post('/payment/confirmation', 'Payment\PaymentController@confirmation');
控制器
public function confirmation()
{
$user = Auth::user();
dd($user); // Returns null
}
我已将路径添加到 VerifyCsrfToken 中间件的异常数组。 Laravel 中是否有任何东西会破坏通过外部网站发布的会话?我确定我遗漏了一些明显的东西。谢谢
【问题讨论】:
-
请尝试使用 Link Tracer 扩展跟踪生命周期中的所有请求,并发布所有重定向的屏幕截图。 chrome.google.com/webstore/detail/link-redirect-trace/…
-
这可能是由于在设置会话 cookie 时使用了不正确的 SameSite 值。
-
这确实是由 config/session.php 中的
same_site设置引起的。将此设置为 null 可以解决问题。