programing

사용자가 로그인한 후 Larvel 5 세션이 유지되지 않음

megabox 2023. 7. 28. 21:54
반응형

사용자가 로그인한 후 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의 파일 세션을 사용하는 경우 두 가지 사항을 확인해야 합니다.

  1. 세션 디렉토리(즉, storage/framework/session/)를 쓰기 가능합니다.
  2. 로그인(/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(날짜가 표시됩니다), 올바르지 않은 경우 다음 지침을 따릅니다.

  1. apt-get 설치 ntp
  2. 서비스 ntp 시작
  3. 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

반응형