[英]Laravel 5.2 - Session not persisting across route change
我剛剛安裝了Laravel 5.2。 我進入我的項目幾個小時,我注意到會話不會在路線上持續存在。 在表單上使用驗證服務時,我首先注意到了這一點。 驗證失敗時$error
變量為空。
我創建了兩個簡單的路線來重現這個問題。 代碼如下。 Foo
路由加載會話但Bar
路由不加載。
Laravel.log
是空的。 sudo chmod -R 777
設置存儲 php artisan cache:clear
php artisan config:clear
storage/framework/sessions
app/Http/Kernel.php
的新副本 routes.php文件
Route::group(['middleware' => ['web']], function () {
Route::get('foo','AuthController@foo');
Route::get('bar','AuthController@bar');
});
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,
];
你能試試嗎?
public function foo(Request $request)
{
$value = $request->session()->put('key', 'value');
}
public function bar(Request $request)
{
$value = $request->session()->get('key');
return $value;
}
如果您使用的是5.2中包含的默認Auth,請嘗試執行以下操作:
php artisan make:auth
這將重新創建您的auth控制器以及laravel 5.2包含的標准auth附帶的所有其他內容。
這是唯一幫助我的東西。 (我將會話設置為數據庫后,它停止工作...)
更新1
顯然,當您在routes.php中定義了使用“web”中間件的路由時,它會將您從應用程序中注銷並為您提供令牌不匹配。
像這樣:(注意下面的代碼不工作)
Route::auth();
Route::get('/home', 'HomeController@index');
Route::group(['middleware' => 'web'], function() {
Route::get('/', function () {
return view('welcome');
});
});
轉到您網站的根目錄會退出,當您再次訪問/ home時,您將被重定向到登錄名。 如果您嘗試再次登錄,則會出現令牌不匹配的情況。
以下內容阻止了錯誤的出現:
Route::auth();
Route::get('/home', 'HomeController@index');
Route::get('/', function () {
return view('welcome');
});
要么我不理解新的中間件,要么它不起作用,因為我的“/”路由應該使用網絡中間件或者我錯了?
解決方案:您需要從路由/路由組中刪除Web中間件,因為從5.2開始自動添加Web中間件,這也是導致問題的原因。
我注意到如果在config / session.php下將'secure'設置為true並且您沒有通過HTTPS訪問您的站點,則會話不會持續存在。 我通過將'secure'設置為false來解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.