簡體   English   中英

Laravel 5.2 - 會話不會在路由更改中持續存在

[英]Laravel 5.2 - Session not persisting across route change

我剛剛安裝了Laravel 5.2。 我進入我的項目幾個小時,我注意到會話不會在路線上持續存在。 在表單上使用驗證服務時,我首先注意到了這一點。 驗證失敗時$error變量為空。

我創建了兩個簡單的路線來重現這個問題。 代碼如下。 Foo路由加載會話但Bar路由不加載。

  • Laravel.log是空的。
  • sudo chmod -R 777設置存儲
  • 我已經嘗試過數據庫驅動程序和文件驅動程序。 同樣的結果。
  • 我已經更新了數據庫以包含會話表更改(用戶ID等)
  • php artisan cache:clear
  • php artisan config:clear
  • 使用文件驅動程序時,我看到會話文件存儲在storage/framework/sessions
  • 我有一個從5.2存儲庫中獲取的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM