Vraag Probeer dubbele sessiegegevens van gebruikers te voorkomen in sessietabel: Laravel


Voorbeeldgegevens in deze tabel zien er als volgt uit:

enter image description here 

Er zijn meerdere dubbele sessies van gebruikerssessies aanwezig in de tabel.

vendor \ laravel \ framework \ src \ Illuminate \ Session \ DatabaseSessionHandler.php

In het bovenstaande bestandspad hebben we de onderstaande methode

public function write($sessionId, $data)
{
    $payload = $this->getDefaultPayload($data);

    if (! $this->exists) {
        $this->read($sessionId);
    }
    if ($this->exists) {
        $this->getQuery()->where('id', $sessionId)->update($payload);
    } else {
        $payload['id'] = $sessionId;

        $this->getQuery()->insert($payload);
    }

    $this->exists = true;
}

Het controleert op Sessie-ID.

Vraag

Kan ik vermijden creatie van dubbele Gebruikers Sessie Records in Session Table? Is er een vlag die dit doet in het Session Config-bestand?


13
2017-08-16 08:00


oorsprong


antwoorden:


Het lijkt een vergissing te zijn in uw karaktertrek, moet dit zo zijn? :

 if (! $this->exists) {
    $this->read($sessionId);
}else{

   if ($this->exists) {
       $this->getQuery()->where('id', $sessionId)->update($payload);
   } else {
       $payload['id'] = $sessionId;
       $this->getQuery()->insert($payload);
   }
}

1
2017-08-23 13:28



Vanuit uw vraag wilt u slechts één gebruikerssessie in de database achterlaten, wat betekent dat één gebruiker alleen op één apparaat kan inloggen, bijvoorbeeld als u al bent aangemeld vanuit Chrome en vervolgens als u inlogt via firefox, uw Chrome-aanmeldingsstatus zal worden verwijderd.

Om dit te bereiken kun je een functie in schrijven App\Http\Controllers\Auth\AuthController:

public function authenticated(Request $request,User $user){
    $previous_session = $user->session_id;

    if ($previous_session) {
    \Session::getHandler()->destroy($previous_session);
    }

    Auth::user()->session_id = \Session::getId();
    Auth::user()->save();
    return redirect()->intended($this->redirectPath());
}

deze functie zal een voor de hand liggende sessie uit de database destabiliseren voordat u inlogt. voor meer info moet je Trait controleren:Illuminate\Foundation\Auth\AuthenticatesUsers


0
2017-08-25 16:30