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

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?

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.

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?

1

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.

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.

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ą :(

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