사용자가 로그인한 후 Larvel 5 세션이 유지되지 않음
저는 라라벨 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
파일 대신 드라이브를 사용합니다.이▁the▁thing다▁happens▁same니납어 같은 일이 일어납니다.[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에 대해 잘 모르지만 CodeIgniter에서 CI의 Session Class에 사용자 세션을 저장하고 Laravel에도 세션이 있습니다.
기본 $_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';
편집: 인증 클래스를 사용하는 것으로 확인되었습니다.제 대답은 대부분 사용자 수동 로그인이고 작동합니다.
Auth 클래스는 기본적으로 이 작업을 수행해야 하지만 일부 구성이 없거나 버그가 있을 수 있습니다.
가능한 해결책이 있습니다(Laravel 4, 하지만 시도해 볼 가치가 있습니다): http://laravel.io/forum/11-11-2014-authcheck-always-returning-false
업데이트:
이 시점에서 드라이버 값을 변경해야 합니다.
'driver' => env('SESSION_DRIVER', 'file')
로.
'driver' => 'file'
...또한 Laravel의 문서에서 드라이버를 이렇게 정의해야 한다는 것을 알 수 있습니다.
먼저 로그아웃을 유발하는 일종의 사전 필터, 미들웨어 또는 경로 그룹이 없는지 확인합니다.적어도 일시적으로 Auth::logout()을 검색하여 주석을 달아야 합니다.저는 이것이 문제가 되는 것을 한 번 이상 보았습니다.
둘째, 당신은 이 전화를 올바르게 하고 있는 것처럼 보입니다.세 번째 매개 변수는 $login:bool이며 기본값은 true입니다.이것은 당신의 문제가 아니지만 PSR-1/2 표준을 충족하도록 TRUE 및 FALSE를 TRUE 및 FALSE로 변경하십시오.
다른 운전자를 시도해보라는 조언을 해드렸겠지만, 그렇게 해보셨으니 결과는 똑같습니다.이로 인해 로그아웃()으로 잘못 안내된 이전 코드가 있는 것으로 생각됩니다.
session.php 파일에서 사용하는지 확인할 수 있는 기본 label의 파일 세션을 사용하는 경우 두 가지 사항을 확인해야 합니다.
- 세션 디렉토리(즉, storage/framework/session/)를 쓰기 가능합니다.
- 로그인(/login) 및 인증 확인(/dashboard) 경로가 모두 그룹 웹 내에 있을 수 있습니다.
예를
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']);
}
이것은 라라벨 5에서 저에게 효과가 있었습니다.
저는 이 문제를 겪었고 저는 이 방법으로 해결했습니다.나 뒤에Auth::attemp
또는Auth::login()
사용하지 않음echo, var_dump or dd()
나는 왜 그런지 모르지만 그것들은 브라우저에서 세션을 유지하는 것을 막습니다.
그리고 지금은 작동하고 있습니다.
public function testLogin(Request $request, $id){
$user = Account::find($id);
Auth::login($user);
}
다음과 같이 저축하는 것을 잊지 마세요.session()->save()
또는Session::save()
세션에 로그인한 사용자가 지속되지 않은 후에도 동일한 문제가 발생했습니다.그래서 저는 이것에 대한 해결책을 찾았습니다.config/sys.dll 파일에서 한 줄만 변경합니다.
이 코드의 변경
'provider' => env('SESSION_COOKIE', Str::slug(env('APP_NAME', 'laravel')', '_''_filename')
받는 사람:
'cookie' => env(
'local_cookies',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
그런 다음 캐시를 지웁니다.그것은 문제를 해결할 것입니다 :)
흠... 정정했습니다.컴퓨터가 올바른 날짜와 시간으로 설정되어 있는지 확인하고 네트워크에서 함께 작업하는 다른 컴퓨터와 동일하게 설정되어 있는지 확인합니다.
데비안 시스템의 예:
명령 프롬프트에서 다음을 누릅니다.date
(날짜가 표시됩니다), 올바르지 않은 경우 다음 지침을 따릅니다.
- apt-get 설치 ntp
- 서비스 ntp 시작
- date(날짜 및 시간이 수정된 경우)
session.php(config\session)의 "file" 대신 "cookie" 드라이버를 사용합니다.php\driver)."Auth::attempt()" api 대신 "Auth::loginUsingId()" api를 사용하여 로그인할 때 문제가 발생하여 다른 요청에 대한 세션이 삭제되었습니다.
대상 경로에서도 미들웨어 StartSession을 사용하는지 확인합니다.Laravel 5.2의 "신선" 설치에서 "웹" 미들웨어 그룹은 이를 사용하지만, 로그인 후 기본 $redirectTo이기도 한 루트 경로(/)가 이 그룹 밖에 있었습니다.엄청난 시간 손실.
비슷한 문제가 있었는데 세션 드라이버를 에서 변경하여 해결했습니다.SESSION_DRIVER=database
로.SESSION_DRIVER=file
저의 경우 app/config/sessions.php 파일의 도메인 설정을 변경해야 했습니다.제가 사용하던 도메인 대신 다른 도메인이 쓰여 있어서 자연스럽게 작동하지 않았습니다.왜 페이지를 다시 로드할 때마다 프레임워크가 진행되어 세션 파일을 생성했는지 이해할 수 없습니다.
저도 같은 문제가 있었지만, 지금은 해결되었습니다.
컴퓨터와 로컬 호스트 도메인의 세션 간 충돌 때문입니다.문제 해결 방법:
무엇보다도 먼저 당신의config/session.php
파일을 작성하고 다음을 확인합니다.
'domain' => null,
쿠키를 삭제한 후:
Firefox에서 -> 페이지 정보 보기 -> 보안 -> 쿠키 보기 -> 모두 제거를 마우스 오른쪽 단추로 클릭합니다.
라라벨 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',
],
];
사용 중인 경우loginUsingId()
method 당신은 'discovery' 플래그를 true로 설정해야 합니다.
따라서 다음을 수행하는 대신:
loginUsingId(1);
당신은 해야 합니다.
loginUsingId(1, true);
public/index.php를 확인하여 Laravel 코드 이전에 코드가 있는지 확인하십시오.그 코드들을 제거한 후에, 저는 로그인을 잘 할 수 있습니다.
<?php
echo 'hello';
?>
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @author Taylor Otwell <taylor@laravel.com>
*/
누군가가 내 사이트를 "실수"한 것 같고, index.php가 악성 코드의 주요 대상입니다.
세션 시작을 추가하고 미들웨어를 글로벌 미들웨어에 인증하기만 하면 됩니다.kernel.php
파일
그냥 확인하고 쿠키 허용 거짓.
'secure' => env('SESSION_SECURE_COOKIE', false)
저의 경우, 저는 그것을 진실이 아닌 진실로 표현했고, 그리고 나서 그것을 거짓으로 바꿨습니다.
오라클 데이터베이스를 다룰 때 이 문제에 직면하고 있으며, 검색 및 디버깅을 통해 변경을 통해 해결하고 있습니다.protected $primaryKey = "name in lowercase"
public $incrementing = false;
언급URL : https://stackoverflow.com/questions/30769434/laravel-5-session-not-persisting-after-user-is-logged-in
'programing' 카테고리의 다른 글
전체 텍스트 파일을 C의 문자 배열로 읽는 중 (0) | 2023.07.28 |
---|---|
누가 아약스와 휴식의 차이점을 설명해 줄 수 있습니까? (0) | 2023.07.28 |
파이썬 메소드 오버라이드, 서명이 중요합니까? (0) | 2023.07.28 |
Spring MVC(비동기) 대 Spring WebFlux (0) | 2023.07.28 |
요소가 표시되는 시점에 대한 이벤트 수신기? (0) | 2023.07.28 |