2016-06-12 10 views
0

私はLaravelバージョン5.2.37を使用しています。私は、クライアントの共有(CPanelの、PHP 5.5.36)のホスティングにコードをアップロードすると、フォームを送信せずに、私はリフレッシュを打つ各リフレッシュ時にLaravelが新しいCSRFトークンを作成します

<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}"> 

と:私は次の行でブレードビューでシンプルなHTMLフォームを持っていますcsrfトークン値は変化し続ける。

私のローカルマシン(MacOS/Apache2/5.6.16)では、csrfトークンは少なくとも2分(config/session.phpの設定ごとに)持続します。これが原因で起こっているPHP 5.5.36の古いバージョンかもしれませんか?

UPDATE: 私は、CSRFの検証をオフにし、それは別のページで呼ばれていたときにセッションが、ファイルに保存されているが、それはもはや見つかったことを発見しません。私はこのサーバがPCIに準拠していることに注意したい。

+0

提出すると動作しますか? –

+0

セッションに値を入力してルートをヒットしてその値を取得すると、それはありますか?セッション再生成の問題をチェックします。 – lagbox

+0

私が(Ajax経由で)提出すると、私はTokenMismatchExceptionを取得します。私はルートを 'Route :: group(['middleware' => ['web']、function(){...}'にラップしようとしましたが、リフレッシュ時にcsrfトークンを再生成するべきではありません。 – bazzaretta

答えて

0

さて、私はそれを最後に考え出しました。愚かな私はこのような何かを見て機能を持つカスタムヘルパーを作っ:

<?php 
function doSomething($arg) 
{ 
    ?><p>When this function is called, 
    display <b><?php echo $arg; ?> value.</b></p> 
    <?php 
} 
?> 

あなたはおそらく、ワードプレス内でこのように書かれた関数をたくさん見てきました。職人コードではありませんが、ほとんどの場合、うまくいきますが、Laravelはヘルパーを扱う際にこのようなナンセンスを許容しません。私が代わりに文字列を返すように私の機能を書いた後ので、すべてが正常に戻って来た:物語の

​​3210

道徳 - 醜いコードを記述しないでください。関数が返ってきたことを確認し、特にヘルパー関数を使って文字列を直接エコー/プリントすることは絶対にしないでください。

まだ非永続トークンに問題がある場合は、プロジェクトのすぐ隣にLaravelをインストールし、基本的なトークンテストを実行して、追加したすべてのカスタムコードをチェックしてください。 99%の確実性をもって、エラーはあなた自身のコードによって引き起こされていると私は言う。

1

config/session.phpの 'domain'を正しいパスに定義してみてください。デフォルトではnullに設定されていますが、サーバー上ではそれをクリアする必要があります。

+0

私はそれを試しましたが、うまくいきませんでした。 VerifyCsrfTokenクラスのURIの保護。適切な解決策が見つかった場合は、ここに投稿します。 – bazzaretta

関連する問題