Laravel 5。
ユーザーのログイン後、ログイン状態はページ間で保持されません。明らかに、_Session::
_と関係があります。
ユーザーのログイン方法は非常に簡単です。
_if (Auth::attempt(['email' => $data['email'], 'password' => $data['password']],
isset($data['remember_me']) ? TRUE : FALSE))
{
return redirect()->intended('/');
}
_
ユーザーがログインしていない場合は、単純なprint_r(Session::all());
によって次のメッセージが表示されます。
_Array
(
[_token] => wV8o75lZnCZ0f6CMMQgdBBM2AxSYjtWisAXx6TgZ
[flash] => Array
(
[old] => Array
(
)
[new] => Array
(
)
)
[_previous] => Array
(
[url] => http://localhost/public
)
)
_
ユーザーが_/
_にリダイレクトされてログインした後、配列は次のようになります。
_Array
(
[_token] => wV8o75lZnCZ0f6CMMQgdBBM2AxSYjtWisAXx6TgZ
[flash] => Array
(
[old] => Array
(
)
[new] => Array
(
)
)
[_previous] => Array
(
[url] => http://localhost/public/
)
[login_82e5d2c56bdd0811318f0cf078b78bfc] => 2
)
_
ただし、ページの更新またはリダイレクトにつながるアクションの後、セッションステータスは失われます。
_config/session.php
_ファイルは次のようになります。
_<?php
return [
'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => null,
'table' => 'sessions',
'lottery' => [2, 100],
'cookie' => 'laravel_session',
'path' => '/',
'domain' => null,
'secure' => false,
];
_
セッション用にローカルに保存されたファイルは、書き込みおよび読み取りが可能です。
ファイルの代わりにdatabase
ドライブを使用してみました。同じことが_[login_xx] => 2
_キー/値が失われ、ログアウトしました。
_Session::
_は完全にリセットされていないため、ユーザーに適切にログインしていないか、どこかで行うべきではないことをしているだけではないかと疑っています。
私は同様の問題に直面しました、私は単に電話しました:
Session::save();
セッションストレージへの追加/更新/削除の後。そのため、次のようになりました。
$id = Input::get('id');
Session::forget('cart.' .$id);
Session::save();
同じ問題がありました。 dd()とprint_r()のさまざまな組み合わせを削除して、テスト目的で応答をダンプし、メソッドがビューを完了して完全にレンダリングできるようにすると、問題はなくなり、セッションが持続しました。
変化を解決した
'cookie' => 'laravel_session',
に
'cookie' => 'myapp_session',
laravelに従って、Cookieの名前はすべてのドライバーに影響します
私はLaravelに精通していませんが、CodeIgniterではCIのセッションクラスにユーザーセッションを保存し、Laravelも持っています。
build-in session を使用することをお勧めします。これはデフォルトの$ _SESSIONよりも永続的です。おそらく、データベースにユーザーデータを保存し、ページの更新/変更ごとにセッションがDBから再び読み込まれます。
ユーザーが認証されたら、次のようにセッションデータを保存するだけです。
Session::put('userData', 'value');
...ここで、値は単なるブール値でも、ユーザー固有のデータを保持するオブジェクト全体でもかまいません。
各ページの読み込みで、セッションからユーザーデータを取得します。
$user = Session::get('userData');
if($user->id) echo 'user is logged-in'; //or if($user) - depends on what you store in 'userData' key
else echo 'guest only privilegies';
EDIT:Authクラスを使用していることがわかります。私の答えは主にユーザーの手動ログインであり、それは動作します。
Authクラスはデフォルトでこれを行うべきだと思いますが、おそらくいくつかの設定が欠落しているか、バグがあります。
考えられる解決策は次のとおりです(Laravel 4、試してみる価値あり): http://laravel.io/forum/11-11-2014-authcheck-always-returning-false
this の時点で、ドライバーの値を変更しようとする必要があります
'driver' => env('SESSION_DRIVER', 'file')
に
'driver' => 'file'
... Laravelのドキュメントでも、ドライバーをそのように定義する必要があることがわかります。
デフォルトのlaravelのfile sessionを使用している場合は、session.phpファイルで使用しているかどうかを確認できる2つのことを確認する必要があります。
すなわち。
Route::group(['middleware' => ['web']], function () {
Route::get('/home/login', ['as' => 'login', 'uses' => 'HomeController@getLogin']);
Route::post('/home/login', ['as' => 'login', 'uses' => 'HomeController@postLogin']);
Route::get('/home/dashboard', ['as' => 'home', 'uses' => 'HomeController@getDashboard']);
}
これはLaravel 5。
まず、ログアウトの原因となる何らかの前のフィルター、ミドルウェア、またはルートグループがないことを確認します。少なくとも一時的に、Auth :: logout()を検索してコメント化します。私はこれが何度も問題であることを見てきました。
次に、この呼び出しを正しく実行しているように見えます。 3番目のパラメーターは$ login:boolで、デフォルトはtrueです。これはあなたの問題ではありませんが、PSR-1/2標準を満たすためにTRUEとFALSEをtrueとfalseに変更してください。
別のドライバーを試すことをお勧めしますが、それを行って同じ結果が得られます。これにより、logout()に誤った方向を向ける何らかの初期のコードがあると考えるようになります。
私の場合、app/config/sessions.phpファイルのドメイン設定を変更する必要がありました。私が使用していたドメインではなく、別のドメインがそこに記述されていたため、当然動作しませんでした。フレームワークが先に進み、ページをリロードするたびにセッションファイルを作成した理由はわかりませんが。
correctHum ...マシンが適切な日付と時間で設定されていること、およびネットワーク上の他のマシンも同様に設定されていることを確認してください。
Debianシステムの例:
コマンドプロンプトで、date
を押します()日付が表示されます。正しくない場合は、次の指示に従ってください。
同様の問題がありましたが、セッションドライバーをSESSION_DRIVER=database
からSESSION_DRIVER=file
loginUsingId()
メソッドを使用している場合、 'remember'フラグをtrueに設定する必要があります。
だから、代わりに:
loginUsingId(1);
やったほうがいい
loginUsingId(1, true);
Session.phpの「ファイル」の代わりに「cookie」ドライバーを使用します(config\session.php\driver)。 「Auth :: attempt()」apiの代わりに「Auth :: loginUsingId()」apiを使用したログインで問題が発生しました。別のリクエストのセッションが破壊されました。
laravel 5.4で同じ問題が発生しました。私にとっての解決策は次のとおりです。
ファイル/app/Http/Kernel.phpで、デフォルトでミドルウェアAuthenticateSessionがコメントされました。
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
//\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
この行のコメントを外してのみ、セッションはすべてのルートで正常に動作します
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
ターゲットルートもミドルウェアStartSessionを使用していることを確認してください。 Laravel 5.2の「フレッシュ」インストールでは、「web」ミドルウェアグループがそれを使用しますが、ログイン後にデフォルトの$ redirectToであるルートパス(/)は、時間の大幅な損失。
私は同じ問題を抱えていましたが、現在修正されています。
これは、マシンのセッションとlocalhostドメインのセッションが競合しているためです。問題を解決するため:
まず、config/session.php
ファイルして、これを確認します。
'domain' => null,
その後、Cookieをクリアします。
firefoxでは、右クリック->ページ情報を表示->セキュリティ-> Cookieを表示->すべて削除
私はこの問題を抱えており、この方法で解決します。 _Auth::attemp
_またはAuth::login()
を使用した後、echo, var_dump or dd()
を使用しない.
そして今、働いています
_ public function testLogin(Request $request, $id){
$user = Account::find($id);
Auth::login($user);
}
_