2016-01-23 27 views
7

Laravel 5'in yepyeni bir kurulumum var, aslında bunu birden çok sürümde denedim ve aynı soruna devam ediyorum.My Laravel 5.2.10 Oturumlar devam edemiyor

Oturum sürücüsünü yeniden ayarlama dışında varsayılan olarak hiçbir şey değiştirmedim. (Dosya tabanlı da aynı sorunu var). Ben oturumu REDIS görünmesi url/set/abc ziyaret ederseniz

Route::get('/set/{value}', function($value) { 
    var_dump(Session::getId()); 
    Session::set('test', $value); 
    return view('welcome'); 
}); 

Route::get('/get', function() { 
    return 'Get ' . Session::get('test'); 
}); 

şöyle

belirlediğim iki güzergah var (Ben de esaslı dosyasını kullanarak oluşturulan dosyayı bakınız).

127.0.0.1:6379> KEYS * 
1) "laravel:1a3ae6caff6346e4a173fdc1ab4c6eb0f138806b" 
2) "laravel:fed1af2fb44c6e625953237c3fa6fcbb05366a5c" 
3) "laravel:cb37286ccfe3e7caa20557aca840f50cb5a5f20d" 

altında olsa sayfasını ziyaret her zaman gösterildiği gibi oturum, yeni bir oturum yeniden oluşturur, REDIS içinde gayet iyi görünüyor. Ayrıca REDIS oturum değişkenlerinin TTL kontrol ve onlar 120 dakika (saniye cinsinden eşdeğeri) de başlatıldı alırım

'lifetime' => 120, 

'expire_on_close' => false, 

şu şekildedir:

session.php dosyasının kilit parçaları olduğunu.

Neyi yanlış yaptığım hakkında bir fikriniz var mı? Bunu test etmek için bir homestead vm (tamamen stok) kullanmamaya dikkat etmek yararlı olabilir. Ayrıca birden fazla tarayıcı kullanmayı denedim. Tarayıcıya hiç çerez gönderilmiyor, oturum açma kimliğinin ilk alma isteğinin bir parçası olarak tarayıcıya gönderilmesi gerektiğini varsayar mıyım?

+0

... Ben yerel davranışı çoğaltmak için çalışıyorum.'GetId' yönteminin, getId işleviyle denedim ve denemediğim kötü bir – FBidu

+0

@ FBidu bir şey yapıp yapmadığını merak ediyorum, herhangi bir şekilde onu etkilemiyor gibi görünmüyor, aynı garip davranışları alıyorum. –

+0

@FBidu Aslında ['getId'] (https://github.com/laravel/framework/blob/5.2/src/Illuminate/Session/Store.php#L162-L165), bunun ne anlama geldiğini ve başka hiçbir şey ifade etmediğini yapar:). – Bogdan

cevap

6

Oturumunuzun başlatılmasından Laravel'in middleware sınıfı \Illuminate\Session\Middleware\StartSession sorumludur. L5.2'den önce bu, her istekte koştu, çünkü bu, global middleware yığınının bir parçasıydı. Şimdi, isteğe bağlıdır, çünkü L5.2 aynı uygulama içinde hem bir web kullanıcı arayüzüne hem de bir API'ye izin vermek ister.

app/Http/Kernel.php'u açarsanız, StartSession ara katmanının web adlı bir ara katman grubunun parçası olduğunu görürsünüz. Örneğinizin çalışması için tüm rotalarınızı buraya koymanız gerekiyor.

Route::group(['middleware' => ['web']], function() { 
    Route::get('/set/{value}', function($value) { 
     var_dump(Session::getId()); 
     Session::set('test', $value); 
     return view('welcome'); 
    }); 

    Route::get('/get', function() { 
     return 'Get ' . Session::get('test'); 
    }); 
}); 

Sen web katman grubu ayrıca tüm görünümlerde $errors değişkeni sağlayarak gibi diğer şeyler için sorumlu olduğunu görebiliriz.

Sen docs bu konuda daha fazla bilgi edinebilirsiniz: Varsayılan olarak

, routes.php dosya tek bir rota yanı sıra içerdiği tüm yolları web katman grubunu uygulayan bir rota grubu içerir. Bu middleware grubu, rotalara oturum durumu ve CSRF koruması sağlar.

web ara katman grubu içinde yer almayan tüm yollar oturumlara ve CSRF korumasına erişemez, bu nedenle bu özelliklere gereksinim duyulan tüm yollar grubun içine yerleştirildiğinden emin olun. Genellikle, bu grup içinde yolların en yerleştirecektir:

Kaynak: https://laravel.com/docs/5.2/routing gerçekten garip

+0

Parlak büyüttü, teşekkürler Thomas, neyse ki gönderdikten kısa bir süre önce github bir adamdan aynı cevap var :), ikiniz de hayat koruyucular. –

+0

Tamam. :) Bunu halledince sevindim. –

+0

Aynı problemi yaşıyorum. Güzergâhım bir ara katman yazılımı olan grupta bir grupta olsa da. Rotanım web ara katmanlarının altında olmamalı mı? – majidarif

İlgili konular