gpt4 book ai didi

php - 从第三方网站 POST 后丢失 session 数据

转载 作者:行者123 更新时间:2023-12-04 07:37:00 27 4
gpt4 key购买 nike

我有一个重定向到支付提供商(外部第三方网站)的 Laravel 网站。当用户完成付款后,他们将通过 POST 请求重定向回我的网站。
我遇到的问题是,当用户返回到确认页面时,他们的 session 丢失了。
我想知道这是否是 PHP 的一般行为,但它似乎特定于 Laravel。
我检查了我的 session.php 配置文件,可以确认以下设置 'expire_on_close' => false, .
我已经创建了以下问题的一个非常基本的示例
我的网站(预售)
Controller

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');
Controller
public function confirmation()
{

$user = Auth::user();
dd($user); // Returns null

}

我已将路径添加到 VerifyCsrfToken 中间件的异常数组。 Laravel 中是否有任何内容会破坏通过外部网站发布的 session ?我确定我遗漏了一些明显的东西。谢谢

最佳答案

在我的测试中,似乎 session 实际上并没有被破坏。但是在接收外部POST请求时并没有加载, session 将被摧毁 如果您允许返回主站点以触发新 session 保存。通过发送 header()在可以保存新 session 之前重定向和终止进程,似乎可以恢复现有 session 。
好吧,也许有点恶心?

Route::match(['get','post'],'/payment/confirmation','Payment\PaymentController@confirmation');
public function confirmation(Request $request)
{
// assert cookie or reload current URL
if (! $request->hasHeader('Cookie')) {
header('Location: '.url()->current());
exit;
}

$user = Auth::user();
dd($user); // user exists!
}
我不会说这是一个很好的解决方案。确实感觉有点hackish。可能需要一些额外的测试。但乍一看,它似乎确实有效——至少对我来说是这样。也许它提供了一些关于幕后实际发生的事情的额外见解。
另外,我不确定您是否要向 GET 请求公开付款确认页面。
但这是一个有趣的兔子洞。

关于php - 从第三方网站 POST 后丢失 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67692358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com