我有一个Laravel网站,会重定向到一个支付提供商(外部第三方网站)。当用户完成付款后,他们通过POST请求返回到我的网站。
我的问题是,当他们返回确认页面时,用户的会话丢失了。
我想知道这是否是PHP一般性的行为,但似乎是特定于Laravel的。
我已检查了sessions.php配置文件,并确认以下设置为'expire_on_close' => false。
我已创建了以下基本示例,以说明这个问题:
我的网站(售前)
控制器
控制器
我的问题是,当他们返回确认页面时,用户的会话丢失了。
我想知道这是否是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)
Route::post('/payment/confirmation', 'Payment\PaymentController@confirmation');
控制器
public function confirmation()
{
$user = Auth::user();
dd($user); // Returns null
}
我已经在VerifyCsrfToken中间件的异常数组中添加了路径。在通过外部网站进行POST请求时,有没有Laravel内置的东西会销毁会话?我肯定漏掉了一些明显的东西。谢谢。
same_site
设置引起的。将其设置为null即可解决问题。 - kinggs