2015-06-21 40 views
9

Tôi đang có ứng dụng một trang được tạo trên Laravel 5.1. Tôi sử dụng localStorage để giữ khóa API và tôi không cần cookie. Laravel tạo ra hai tập tin cookie cho tôi:Làm thế nào để tắt cookie trong Laravel 5?

  • XSRF-TOKEN
  • laravel_session

Nếu tôi đặt SESSION_DRIVER-array trong cấu hình môi trường của tôi, laravel_session cookie không còn tạo ra.

Nhưng tôi nghĩ rằng có thể có một vấn đề với XSRF-TOKEN cookie, vì tôi phát hiện ra đoạn mã này trong lớp VerifyCsrfToken middleware:

public function handle($request, Closure $next) 
{ 
    if ($this->isReading($request) || $this->shouldPassThrough($request) || $this->tokensMatch($request)) { 
     return $this->addCookieToResponse($request, $next($request)); 
    } 

    throw new TokenMismatchException; 
} 

addCookieToResponse phương pháp trông như thế này:

protected function addCookieToResponse($request, $response) 
{ 
    $config = config('session'); 

    $response->headers->setCookie(
     new Cookie(
      'XSRF-TOKEN', $request->session()->token(), time() + 60 * 120, 
      $config['path'], $config['domain'], false, false 
     ) 
    ); 

    return $response; 
} 

Nó có vẻ như nó đặt cookie này không có vấn đề gì. Tôi có thể vô hiệu hóa phần mềm trung gian này, nhưng tôi muốn sử dụng nó để xác minh mã thông báo CSRF với các tiêu đề HTTP. Tôi có thể tắt cookie hoàn toàn không?

+1

Nếu bạn đang sử dụng API của trình duyệt bằng cách sử dụng mã thông báo, tại sao bạn không tắt hoàn toàn phần mềm trung gian VerifyCsrfToken? Điều này sử dụng cookie mà bạn không quan tâm. Bạn có thể vô hiệu hóa bằng cách vào app/http/Kernel.php và bình luận dòng – codegeek

+0

chỉ để biết thêm thông tin cơ bản, lý do muốn vô hiệu hóa cookie là gì? – ExoticChimp

+0

@ExoticChimp Có luật bắt buộc phải thông báo cho người dùng về cookie nếu bạn sử dụng bất kỳ cookie nào. Tôi không cần chúng, vì vậy tôi muốn vô hiệu hóa chúng và được miễn phí từ đó "Chúng tôi đang sử dụng cookie" thông tin :) –

Trả lời

2

Chỉ cần nhận xét các dòng trong app\Http\Kernel.php liên quan đến cookie và phiên. Những cái sau mà tôi đã tìm thấy;

\App\Http\Middleware\EncryptCookies::class, 
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
\Illuminate\Session\Middleware\StartSession::class, 
\Illuminate\View\Middleware\ShareErrorsFromSession::class, 
\App\Http\Middleware\VerifyCsrfToken::class, 

Hy vọng điều đó sẽ hữu ích.

+0

Vui lòng đọc đoạn cuối của chủ đề của tôi. –

+0

Bạn có thể gửi mã thông báo CSRF qua tiêu đề HTTP, tất nhiên, nhưng bạn phải lưu trữ mã thông báo ở phía máy khách. Vì vậy, nếu bạn sẵn sàng vô hiệu hóa cookie, bạn phải tìm ra cách truyền và lưu trữ mã thông báo nhận được từ back-end. Có thể localstorage có ích để lưu trữ. Và cũng có thể gửi các thủ tục cho bạn, tức là thiết lập tiêu đề HTTP thích hợp. – ozanmuyes

Các vấn đề liên quan