2016-10-24 5 views
0

通知エンドポイントに一連のajax投稿を作成したページがあります。ゲストセッションを使用して投稿全体にデータを保存したいと思います。ログインは必要ありませんが、コンテキスト・コントロールは関係ありません。私はクッキーを使用しています。Ajax POSTが現在のゲストセッションの一部として認識されない、Laravel 5.3

これらのAjaxリクエスト(これらはnullになります)はセッションからオブジェクトを復元する際に問題が発生しました。通知エンドポイントの各投稿では、request()->session()->getId()の各値が表示されます適切に伝達されていないため、私は見ていると予想されるオブジェクトが見えないのです。

私のURLは「Web」ミドルウェアを使用しています。

私は毎回ページがオープン:

<script> 
    $.ajaxSetup({ 
     headers: { 
      'X-CSRF-TOKEN': '<?php echo csrf_token(); ?>' 
     } 
    }); 
</script> 

AJAXリクエストを確保するためには、ヘッダ

でCSRFトークンを持つことになります私はまた、「要求()でください - >セッション() - >(再生成します); '新しいセッションを確保するためにページが開かれるたびに(通知ではなく)開きます。

コンテキストの一部としてリクエストを識別するためにPOSTで送信する必要があるものがありますか(おそらくCookieの値を渡しますか)。

+0

あなたのコードを表示できますか?あなたのコントローラメソッドとあなたのAjaxリクエスト? –

答えて

1

あなたはステートレスにする必要があります。

  • クライアントは、各要求と共に送信し、サーバが生成して返す
  • 「トークン」クライアントは
  • ローカルストレージに、例えばトークン格納これを受信
  • クライアントからサーバに要求を送信ヘッダとしてトークンが(またはURLのパラメータとして)

利点は、あなたの中にある(サーバは、ヘッダからトークンをチェックします)セッション処理の依存関係

+0

トークンとしてミリ秒のタイムスタンプを使用して問題を解決しました。何らかの信頼性の高いトークンを生成する「ラーベルの方法」はありますか? CSRFがセキュリティ面を担当し、タイムスタンプを守るべきでしょうか? –

+1

@PauloAmaral私は鍵でハッシュするのが好きです。 http://php.net/manual/en/function.hash-hmac.php – schellingerht

0
 var _id  = 1011; 
     var url  = "/test"; 

     $.ajax({ 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      }, 
      beforeSend: function(){ 

      }, 
      url: url, 
      data: {id: _id}, 
      type: 'POST', 
      dataType: 'json', 
      success: function(result){ 

      } 
     }); 
+0

を参照してください。それは私の最初の試みの1つでしたが、失敗しました。私の研究によれば、CSRFトークンは、セッションをユニークにするのではなく、クライアントの要求を信頼できるものにすることと関連があります。 –

+0

csrfトークンによるcsrf攻撃の防止 –

+0

このコードをコピーすると、> meta name = "csrf-token" content = "{{csrf_token()}}"> –

関連する問題