Laravel 5.8 Session 小姐来自 API 回调
Laravel 5.8 Session Miss From API Callback
我想用Session保存Laravel的值,但是我丢失了session的数据。我该怎么办?
我尝试将 .env
SESSION_DRIVER 更改为 'redis' 或 'file',但仍然无效。
这是我的Api回调函数,我把session保存在这里
一个file.php
public function getAccount(Request $request)
{
try {
$request->session()->forget('account');
$data = json_decode(file_get_contents('php://input'), true);
Log::info('result => '.($data['result'][0]));
if($data['error']) {
Log::info('CoolWalletController GetAccount Has Error : ' . $data['result']);
}else{
$request->session()->put('account', $data['result'][0]);
}
$request->session()->save();
Log::info('Session => '.session('account'));
Log::info('====================');
return 'ok';
} catch (Exception $e) {
Log::info('FAILED!!');
}
}
这是我的日志文件:
[2019-05-16 17:20:40] local.INFO: ====================
[2019-05-16 17:20:58] local.INFO: result => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:20:58] local.INFO: Session => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:20:58] local.INFO: ====================
[2019-05-16 17:34:52] local.INFO: result => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:34:52] local.INFO: Session => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:34:52] local.INFO: ====================
[2019-05-16 17:37:21] local.INFO: result => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:37:21] local.INFO: Session => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:37:21] local.INFO: ====================
[2019-05-16 17:47:43] local.INFO: result => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:47:43] local.INFO: Session => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:47:43] local.INFO: ====================
这是我想在这里得到的另一个控制器函数Session。
B file.php
public function phone(Request $request)
{
$account = $request->session()->get('account', null);
return view('user.trade.phone', compact('account'));
}
我总是得到 $account is Null。
刚刚在Afile.php中的session有保存。但是Bfile.php总是拿不到。
@Rezrazi:
dd($request->session()->all()):
array:4 [▼
"_previous" => array:1 [▶]
"_flash" => array:2 [▶]
"_token" => "zFuqDPebryzAF03ALGb31JIqxG2JxOUlKtSvqPWd"
]
(我也想知道session 'account'在哪)
phpartisanroute:list(全部的一部分)
| | POST | api/coolWallet/getAccount | api.coolWallet.getAccount | App\Http\Controllers\Api\CoolWalletController@getAccount | web
这样试试:
$account = $request->session()->get('account');
路由结构:
Route::group(['middleware' => ['web'], 'prefix' => 'api'], function(){
// YOUR ROUTES
});
函数 A
public function getAccount(Request $request)
{
try {
$request->session()->put('account', "TEST");
return 'ok';
} catch (Exception $e) {
Log::info('FAILED!!');
}
}
函数 B
public function phone(Request $request)
{
$account = $request->session()->get('account');
// Check the value
dd($account);
return view('user.trade.phone', compact('account'));
}
Session 需要浏览器支持。
所以 api 路由不是 return 返回浏览器,它只是用于回调。
所以我使用 Redis::set('key','value');
而不是会话。
我想用Session保存Laravel的值,但是我丢失了session的数据。我该怎么办?
我尝试将 .env
SESSION_DRIVER 更改为 'redis' 或 'file',但仍然无效。
这是我的Api回调函数,我把session保存在这里
一个file.php
public function getAccount(Request $request)
{
try {
$request->session()->forget('account');
$data = json_decode(file_get_contents('php://input'), true);
Log::info('result => '.($data['result'][0]));
if($data['error']) {
Log::info('CoolWalletController GetAccount Has Error : ' . $data['result']);
}else{
$request->session()->put('account', $data['result'][0]);
}
$request->session()->save();
Log::info('Session => '.session('account'));
Log::info('====================');
return 'ok';
} catch (Exception $e) {
Log::info('FAILED!!');
}
}
这是我的日志文件:
[2019-05-16 17:20:40] local.INFO: ====================
[2019-05-16 17:20:58] local.INFO: result => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:20:58] local.INFO: Session => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:20:58] local.INFO: ====================
[2019-05-16 17:34:52] local.INFO: result => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:34:52] local.INFO: Session => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:34:52] local.INFO: ====================
[2019-05-16 17:37:21] local.INFO: result => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:37:21] local.INFO: Session => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:37:21] local.INFO: ====================
[2019-05-16 17:47:43] local.INFO: result => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:47:43] local.INFO: Session => 0xb74bCB9747dBd6DfC75D1E9321e75766705cf213
[2019-05-16 17:47:43] local.INFO: ====================
这是我想在这里得到的另一个控制器函数Session。 B file.php
public function phone(Request $request)
{
$account = $request->session()->get('account', null);
return view('user.trade.phone', compact('account'));
}
我总是得到 $account is Null。
刚刚在Afile.php中的session有保存。但是Bfile.php总是拿不到。
@Rezrazi:
dd($request->session()->all()):
array:4 [▼
"_previous" => array:1 [▶]
"_flash" => array:2 [▶]
"_token" => "zFuqDPebryzAF03ALGb31JIqxG2JxOUlKtSvqPWd"
]
(我也想知道session 'account'在哪)
phpartisanroute:list(全部的一部分)
| | POST | api/coolWallet/getAccount | api.coolWallet.getAccount | App\Http\Controllers\Api\CoolWalletController@getAccount | web
这样试试:
$account = $request->session()->get('account');
路由结构:
Route::group(['middleware' => ['web'], 'prefix' => 'api'], function(){
// YOUR ROUTES
});
函数 A
public function getAccount(Request $request)
{
try {
$request->session()->put('account', "TEST");
return 'ok';
} catch (Exception $e) {
Log::info('FAILED!!');
}
}
函数 B
public function phone(Request $request)
{
$account = $request->session()->get('account');
// Check the value
dd($account);
return view('user.trade.phone', compact('account'));
}
Session 需要浏览器支持。 所以 api 路由不是 return 返回浏览器,它只是用于回调。
所以我使用 Redis::set('key','value');
而不是会话。