2016-11-21 88 views
3

我遇到了Laravel会话创建和读取的问题。 我可以创建会话值,但问题是访问数据。 如果我在POST请求中创建会话值,那么我无法通过GET请求访问它。Laravel无法检索保存在POST请求中的会话数据

这里是我的路线

Route::get('/', '[email protected]'); 
Route::get('/admin/dashboard', '[email protected]'); 
Route::post('/admin/login_admin', '[email protected]'); 
Route::post('/admin/login_test', '[email protected]'); 
Route::get('/admin/login', '[email protected]'); 

这里doLogin使用POST方法:

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' 
    ]); 

} 

现在的问题是,如果要求在其他GET请求部分访问会话值,那么就没有允许访问。

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的节选区域,以避免CSRF令牌问题添加URL “ '/管理/ login_admin'”,同时发布的数据

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' 
    ]; 
} 

回答

0

让我们试试这样

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

号我唯一的工作用于通过POST请求访问的方法。使用GET请求的方法不显示会话值。 – FRabbi

0

为什么你想手动验证用户?

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

例如:

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

不,我只为通过POST请求访问的方法工作。使用GET请求的方法不显示会话值。也请检查问题。我已经更新了这个问题 – FRabbi