【问题标题】:Laravel 5.8 Session Miss From API Callback来自 API 回调的 Laravel 5.8 会话丢失
【发布时间】:2019-05-16 10:09:07
【问题描述】:

我想使用 Session 在 Laravel 中保存价值,但我丢失了会话数据。我该怎么办?

我尝试将.envSESSION_DRIVER 更改为“redis”或“文件”,但仍然无法正常工作。

这是我的 Api 回调函数,我在这里保存会话。

一个文件.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 文件.php

public function phone(Request $request)
    {

        $account =  $request->session()->get('account', null);

        return view('user.trade.phone', compact('account'));
    }

我总是得到 $account is Null。

A file.php 中的会话已保存。但是B file.php总是无法获取。



@Rezrazi :

dd($request->session()->all()):

array:4 [▼
  "_previous" => array:1 [▶]
  "_flash" => array:2 [▶]
  "_token" => "zFuqDPebryzAF03ALGb31JIqxG2JxOUlKtSvqPWd"
]

(我也想知道会话“帐户”在哪里)

php artisan route:list (a part of all)

|        | POST          | api/coolWallet/getAccount       | api.coolWallet.getAccount       | App\Http\Controllers\Api\CoolWalletController@getAccount       | web     


【问题讨论】:

  • 您使用的是哪个中间件组? apiweb 如果您在 api.php 中定义了路由,那么您将无法使用会话,因为它没有加载
  • Route::prefix('api')->group(function () { Route::post('coolWallet/getAccount', 'Api\CoolWalletController@getAccount')->name('api.coolWallet.getAccount'); }); api 不使用中间件
  • 你在routes/api.php中定义了这条路由吗?
  • 没有。我在```routes/web.php``` 定义路由
  • 您能否dd($request->session()->all()) 获取所有已加载会话的转储,您能否发布您的php artisan route:list

标签: laravel session laravel-5.8


【解决方案1】:

Session 需要浏览器支持。 所以api路由不会返回浏览器,只是为了回调。

所以我使用Redis::set('key','value'); 而不是会话。

【讨论】:

    【解决方案2】:

    试试这样:

    $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'));
        }
    

    【讨论】:

    • 我已经试过了,无效。我认为问题不在这里。
    • 请发布您的路线
    • ``` Route::prefix('api')->group(function () { Route::post('coolWallet/getAccount', 'Api\CoolWalletController@getAccount')->name ('api.coolWallet.getAccount'); }); ```
    • 请使用我的路线组建议结构
    • 对不起,结果和以前一样。
    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 2021-05-15
    • 2014-04-18
    • 2017-01-24
    • 2014-07-20
    • 2016-05-10
    • 2014-10-15
    • 1970-01-01
    相关资源
    最近更新 更多