2017-07-16 173 views
0

我在獲取Cookie時遇到問題,我在一箇中間件「CheckReferral」中定義了一個cookie,但是當我在一個Controller中調用cookie時,cookie返回null,我在瀏覽器中檢查cookie,並且該cookie在瀏覽器中很好,我不知道cookie有什麼問題...我已經搜索了太多,這是我的最後一個資源,有人可以幫助我嗎?Cookie :: get()返回null

這裏是中間件的代碼:

<?php 

namespace App\Http\Middleware; 

use Closure; 

class CheckReferral 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if ($request->hasCookie('referral')) { 
      return $next($request); 
     } else { 
      if ($request->query('ref')) { 
       return redirect($request->fullUrl())->withCookie(cookie()->forever('referral', $request->query('ref'))); 
      } 
     } 

     return $next($request); 
    } 

這是我如何調用該cookie控制器:

protected function create(array $data) 
{ 
    // $referred_by = User::where('affiliate_id', Cookie::get('referral'))->first(); 
    // $referred_user = Cookie::get('referral'); 

    return User::create([ 
     'name'   => $data['name'], 
     'email'  => $data['email'], 
     'password'  => bcrypt($data['password']), 
     'affiliate_id' => $this->uniqueRandomString(), 
     'referred_by' => Cookie::get('referral'), 
    ]); 
} 

這裏是存儲在瀏覽器中的cookie:

Why I can't use this stored?

這裏是數據庫...字段refer_by,是s tored爲空,但應存儲的cookie的值:

Why the cookie return null?

感謝了很多,我希望解決的問題,並知道原因......

回答

0

我用香草PHP,全局變量$_COOKIE

protected function create(array $data) 
{ 
    // $referred_by = User::where('affiliate_id', Cookie::get('referral'))->first(); 
    // $referred_user = Cookie::get('referral'); 

    return User::create([ 
     'name'   => $data['name'], 
     'email'  => $data['email'], 
     'password'  => bcrypt($data['password']), 
     'affiliate_id' => $this->uniqueRandomString(), 
     'referred_by' => $_COOKIE['referral'], 
    ]); 
} 

哪裏Cookie::get('referral')$_COOKIE['referral']是不是一個完美的解決方案,但工作解決它......

1

確保您已經定義中間件app\Http\Kernel.php。具體在'web'陣列。

web.php(路由)文件中導入中間件。

..和最後補充說,中間件路線,像這樣:

Route::web('/', ['middleware' => CheckReferral'] 

如果你已經這樣做了,那麼要確保你已經添加referred_by列到$fillable[]陣列您User模型。

編輯。 這將做到:

\Request::cookie('referral'); 
+0

是的,我已經在內核中定義了中間件,因爲cookie存儲在瀏覽器中......並且中間件全局運行,不需要在路由中定義......並且我已經將'$ fillable []'問題是Cookie :: get()返回N空,我已經測試它與現場電子郵件,這是不可能的,我得到的錯誤...所以,問題是Cookie :: get()... –

+0

請嘗試傾倒這個,如果它實際上在你的中間件中的價值。 ''request-> query('ref')'' – verax

+0

是這個查詢是我的中間件的值... –