2016-01-09 13 views
6

Laravel 5.2をインストールしました。私は私のプロジェクトに数時間を費やしています。セッションがルートを越えていないことに気付いています。フォーム上で検証サービスを使用すると、まずこれに気付きました。検証に失敗すると変数$errorが空になりました。Laravel 5.2 - セッション変更中にセッションが持続しない

私は問題を再現するために2つの簡単なルートを作成しました。コードは以下の通りです。 Fooルートはセッションをロードしますが、Barルートはロードしません。

  • Laravel.logが空です。
  • sudo chmod -R 777保存時
  • 私はデータベースドライバとファイルドライバを試しました。同じ結果。
  • 私はセッションテーブルの変更を含むようにデータベース(ユーザIDなど)
  • php artisan config:clear
  • php artisan cache:clear私はセッションファイルがstorage/framework/sessions
  • に格納されている参照ファイルドライバを使用して更新しました私はapp/Http/Kernel.phpの新しいコピーが5.2リポジトリから取ってきた

routes.phpの

Route::group(['middleware' => ['web']], function() { 


    Route::get('foo','[email protected]'); 
    Route::get('bar','[email protected]ar'); 


}); 

AuthController.php

namespace Zocial\Http\Controllers; 

class AuthController extends Controller 
{ 

public function foo() 
{ 
    \Session::put('user','testing'); 

    //session(['user' => 'testing']); not working either 
    return \Session::get('user'); 
} 

public function bar() 
{ 
    return "Session here: " . \Session::get('user'); 
} 

} 

コンフィグ/ session.php

return [ 

    'driver' => env('SESSION_DRIVER', 'database'), 
    'lifetime' => 120, 
    'expire_on_close' => false, 
    'encrypt' => true, 
    'files' => storage_path('framework/sessions'), 
    'connection' => env('DB_CONNECTION','mysql'), 
    'table' => 'sessions', 
    'lottery' => [2, 100], 
    'cookie' => 'laravel_session', 
    'path' => '/', 
    'domain' => env('APP_DOMAIN', null), 
    'secure' => false, 

]; 
+0

ファイルドライバを使用すると、セッションファイルが 'storage/framework/sessions'ディレクトリ内に作成されていますか? –

+0

新バージョンのLaravel 5.2アプリをインストールしましたか、以前のバージョンからアップデートしましたか? –

+1

有効な 'app/Http/Kernel.php'ファイル構造を持っていることを確認してください。デフォルトのものはこちらhttps://github.com/laravel/laravel/blob/master/app/Http/Kernel.php –

答えて

0

あなたはこれを試すことができますか?

public function foo(Request $request) 
{ 
    $value = $request->session()->put('key', 'value'); 

} 

public function bar(Request $request) 
{ 
    $value = $request->session()->get('key'); 
    return $value; 
} 
+0

あなたの最初の方法は 'foo'でなければならないと思います。だから私はあなたのコードを更新しました。私は私の例と同じ結果を得ます。セッションは返されません。 – stephenthedev

+0

試したときに使ったドライバセッションは何ですか? – ssuhat

+0

私はそれをFileドライバーで試しました。 – stephenthedev

0

あなたは5.2に含まれているデフォルトの認証を使用している場合は、これを実行しよう:

php artisan make:auth 

これはそのlaravel認証標準付属していますあなたの認証コントローラと他のすべてを再作成します5.2には含まれます。

これは私を助けた唯一のものでした。 Update 1では、どうやらそれはアプリケーションからログアウトして、あなたの中で定義されたルートを持っているときあなたのトークンの不一致を与える


(私はデータベースにセッションを設定した後、それは...動作を停止しました) routes.php "Web"ミドルウェアを利用しています。このよう

:あなたは/ homeは再び、あなたがログインにリダイレクトされるためにあなたのウェブサイトのログあなたをのルートに行く

Route::auth(); 

Route::get('/home', '[email protected]'); 


Route::group(['middleware' => 'web'], function() { 
    Route::get('/', function() { 
     return view('welcome'); 
    }); 
}); 

(動作しない以下のコードを気をつけてください)。もう一度ログインしようとすると、トークンの不一致が発生します。

以下が表示され、エラーを停止:

Route::auth(); 

Route::get('/home', '[email protected]'); 

Route::get('/', function() { 
    return view('welcome'); 
}); 

どちらか私は新しいミドルウェアのものを理解していない、またはその「/」ウェブミドルウェアを使用する必要があるため、私のルート以来、働いていないか、私は間違っありません?


ソリューション: ウェブミドルウェアは5.2以降自動的に追加されているので、あなたも私のために問題をcauseingされたものthatsの、あなたのルート/ルートグループからのWebミドルウェアを削除する必要があります。

0

config/session.phpの下で 'secure'がtrueに設定されていて、HTTPS経由でサイトにアクセスしていないと、気付いたセッションは持続しません。私はこれを「安全」をfalseに設定して解決しました。

関連する問題