Tworzenie obiektu korzystając z $_SESSION['']

Odpowiedz Nowy wątek
2019-08-24 11:32
0

Jeśli dobrze zrozumiałem, zmienne php $_SESSION[''] działają w trakcie całej sesji, czyli jak się zaloguje do końca sesji bądź manualnego wylogowania.
Tworzę pseudo grę przeglądarkową, póki co bez ajaxu i chciałem stworzyć bohatera, więc wypadało by mi pobrać wszystkie informacje o moim bohaterze, zaraz gdy sesja wystartuję, więc myślałem nad tym:
Pobieram zmienne zaraz po php session_start()

$_SESSION['name'] = $row['charname'];
$_SESSION['hp'] = $row['health'];
[...]
//i tak każdą statystke, id przedmietów itd.

i użyję ich potem kiedy bohater będzie tworzony (zaraz po zalogowaniu, każdym odświeżeniu strony itd.)

class hero {

    public $name;
    public $hp;
    public $armor;
    public $stat1;
    public $stat2;

    [...]

    public function __construct($name, $hp, $armor, $stat1, $stat2){
        $this->name = $name;
        $this->hp = $hp;
        $this->armor1 = $armor;
        $this->stat1 = $stat1;
        $this->stat2 = $stat2;
    }

       [...]
}

i potem używać tego tak:

myHero = new hero($_SESSION['name'], $_SESSION['hp'] [...])

Czy jest to dobre rozwiązanie?

edytowany 1x, ostatnio: kakaisback, 2019-08-24 11:33

Pozostało 580 znaków

2019-08-24 11:43
1

Trzymaj to po prostu w bazie danych. Teoretycznie możesz te dane przechowywać w sesji, ale musisz dbać o ich spójność potem z bazą, a jak machniesz wszystko od razu do bazuni to problem znika.

Pozostało 580 znaków

2019-08-24 11:48
0

Rozumiem, odnośnie bazuni robiłem to tylko póki co to takim sposobem, tak że pobierałem właśnie $_SESSION ID użytkownika/gracza po zalogowaniu i potem korzystałem z tego przy każdym zapytaniu/kwerendzie SELECT/INSERT [...]etc. Jest to sposób właściwy?

Pozostało 580 znaków

2019-08-24 11:54

Zdecydowanie trzymanie samego ID usera + info o jakimś loginie, wyświetlanej nazwie itp jest lepsze niż pakowanie tam informacji o np stanie zdrowia danej postaci. Sesja to fajne rozwiązanie na dane tymczasowe (koszyk w sklepie, jakieś składane zamówienie czy coś) albo informacja o tym, że dany user jest aktualnie zalogowany. Jeżeli masz dane, które muszą być spójne to korzystaj właśnie z bazy.

Pozostało 580 znaków

2019-08-25 10:59
0

Hmmm, może czas rozważyć jakiś framework, który Ci te sesje będzie obsługiwał? Zwykle w sesjach trzyma się ID użytkownika + jakiś token, na tej podstawie określasz czy użytkownik jest zalogowany, a dalsza część programu skupia się już na pobraniu pozostałych danych.

Pozostało 580 znaków

2019-08-25 21:57
0

Takie coś wkleiłem

            $conn = mysqli_connect('localhost', 'root', '', 'thegame2');
              if (!$conn) {
            printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
        }

        //$_SESSION['userId'] = xxx

        $sql = 'SELECT * FROM users WHERE id = '$_SESSION['userId']'';
         $result = mysqli_query($conn, $sql);

         if (mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_assoc($result)) {
              $name = $row['name'];
              $hp = $row['hp'];
        //itd

            }
         } else {
            echo ""; //nie rób nic ???
         }
         mysqli_close($conn);

Bedzie to dobre rozwiązanie?
@offtop nie wiem czemu tabulatory źle się przeklejają :(

edytowany 7x, ostatnio: kakaisback, 2019-08-25 22:02

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0