Laravel 无法检索保存在 POST 请求中的会话数据

Posted

技术标签:

【中文标题】Laravel 无法检索保存在 POST 请求中的会话数据【英文标题】:Laravel Can't retrieve session data saved in POST request 【发布时间】:2017-04-04 09:42:49 【问题描述】:

我在创建和读取 Laravel 会话时遇到问题。 我可以创建会话值,但问题是访问数据。 如果我在 POST 请求中创建会话值,则无法在 GET 请求中访问它。

这是我的路线

Route::get('/', 'HomeController@index');
Route::get('/admin/dashboard', 'AdminController@dashBoard');
Route::post('/admin/login_admin', 'AdminController@doLogin');
Route::post('/admin/login_test', 'AdminController@test');
Route::get('/admin/login', 'AdminController@seeLogin');

这里使用post方法的doLogin:

public function doLogin(Request $request)

   $email = $request->input("email");
   $password = $request->input("password");

   $checkerInfo = AdminGetLoginChecker($email, $password);
   //if logged in
   if($checkerInfo)
       $request->session()->put('loggedIn', '1');
       $request->session()->put('userId', $checkerInfo);
       $request->session()->save();
       return response()->json([
           'success' => true,
           'message' => 'logged In'
       ]);
   

   return response()->json([
       'success' => false,
       'message' => 'Incorrect User Email, Password'
   ]);

 

现在的问题是如果请求访问其他获取请求部分中的会话值,那么它不允许访问。

public function dashboard(Request $request)


   $data = $request->session()->all();

   print_r($data);

   return view('welcome', ['name' => 'James']);

这里不显示保存的会话数据,因为它是一个 GET 请求。

现在,如果尝试使用 POST 请求在任何其他方法中获取请求,它将在 doLogin 方法中显示之前保存的数据

//it's a POST requset
public function test(Request $request)

   $data = $request->session()->all();
   print_r($data);

如何在 GET 请求的方法中访问会话数据?

提前致谢,

更新:

请注意在 verifyCsrfToken middelwere 的异常区域添加 url "'/admin/login_admin'" 以避免在发布数据时出现 csrf 令牌问题

namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier

   /**
   * The URIs that should be excluded from CSRF verification.
   *
   * @var array
   */
   protected $except = [
       //
       'url' => '/admin/login_admin'
   ];
 

【问题讨论】:

曾经解决过这个问题吗? =/ 【参考方案1】:

您为什么要尝试手动验证用户身份?

对于会话操作,请使用“会话”外观。

例如:

Session::set('your_session_key', 'Session Value');
Session::save();
$yourSessionKey = Session::get('your_session_key');

【讨论】:

没有。我只为通过 POST 请求访问的方法工作。使用 GET 请求的方法不显示会话值。也请检查问题。我已经更新了问题【参考方案2】:

让我们这样尝试

 $input = $request->all();
 // imagine you have Admin.php model
 $query = Admin::login($input['email'], $input['password'])->first();
 if ($query)
 
     Session::put('userId', $query->id);
     Session::save();
     return "u're in";
 
    else
        return "User name or password is wrong";
    

在你的test 函数中

return $request->session()->get('userId');

【讨论】:

没有。我只为通过 POST 请求访问的方法工作。使用 GET 请求的方法不显示会话值。

以上是关于Laravel 无法检索保存在 POST 请求中的会话数据的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 laravel 检索 GET 参数

如何在 Vue.js 和 Laravel 5.4 中发出 POST 请求

(axios) HTTP POST 请求两分钟后失败,Laravel 5 + VueJS

使用 laravel 微风检索登录请求中的关系表

由于 python 中的 Post 请求,检索 get 请求的数据

无法在控制器 Laravel 5.1 中检索通过 ajax 发送的数据