Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sesje w PHP - zapisywanie i pobieranie
Forum PHP.pl > Forum > Przedszkole
Syene
Cześć, tworzę aplikację mobilną w androdzie, połączona z bazą mysql, a skrypty połączenia/edycji/wyświetlania są po stronie serwera w PHP.

Potrzebuję w zakładce użytkowników wyświetlić obecnie zalogowanego użytkownika więc chyba najprościej zrobić to na zasadzie sesji.
Utworzyłem sesję podczas logowania, wygląda to następująco:

  1. require_once 'connect.php';
  2. if((isset($_POST['username'])) && (isset($_POST['password']))) {
  3.  
  4. $username = $_POST['username'];
  5. $password = $_POST['password'];
  6. $password = md5($password);
  7.  
  8. $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
  9. $result = mysqli_query($conn, $sql);
  10. $row = mysqli_fetch_assoc($result);
  11. if (mysqli_num_rows($result) == 1) {
  12. $_SESSION['id_user'] = $row['id'];

Na początku kodu rozpocząłem **session_start();** i chce dodać id obecnie logowanego użytkownika więc zrobiłem **$_SESSION['id_user'] = $row['id'];**

Po czym chce tego użytkownika wyświetlić w programie, dlatego korzystam z kodu:
  1. $sql = "SELECT * FROM users WHERE id = $_SESSION['id_user']";
  2. $result = mysqli_query($conn, $sql);
  3. $users = array();


W momencie, gdy po **WHERE** ustawiam ID na sztywno to wyświetla prawidłowo, jednak z sesji nie pobiera.
Kody logowania i wyświetlania znajdują się w innych plikach, ale w tym samym folderze.
Proszę o pomoc, gdzie robię błąd?
dublinka
Sprawdzales czy istnieje ta sesja i jaka ma wartosc?
viking
Ale masz aplikację w javie która ma niby korzystać z sesji php? zapomnij o tym. Poczytaj o tokenach jwt.
Syene
Dodałem
  1. if(!isset($_SESSION['id_user'])){
  2. echo "session not set";
  3. }

w pliku wyszukiwania, ale wtedy sypie błędem i nic nie chce pokazać, nawet gdy SELECT jest ustawiony na sztywno
dublinka
Daj
  1. print_r($_SESSION);

Syene
Sypie błędem. Błąd jest taki sam za każdym razem. Ze względu na to, że ja mam kodowanie w jsonie po stronie androida to błąd mam praktycznie zawsze ten sam:
"Value of type java.lang.String cannot be converted to JSONArray" jednak po stronie JAVY na 100% jest wszystko prawidłowo.
Podam w select id na sztywno - wszystko działa bez zarzutu. Nawet sypał, gdy miałem session_start(); w tym pliku na samym początku.





Cytat(viking @ 2.01.2021, 13:49:58 ) *
Ale masz aplikację w javie która ma niby korzystać z sesji php? zapomnij o tym. Poczytaj o tokenach jwt.

Aplikacja wyświetla to, co ja jej wyszukam przy pomocy PHP. Jeśli ja na sztywno przypisze ID w
  1. $sql = "SELECT * FROM users WHERE id = 69";

To aplikacja bez problemu wyświetli mi dane użytkownika o id 69 więc aplikacja sama w sobie nie bierze udziału w sesjach.

W momencie wejścia w zakładkę użytkownika, aplikacja wysyła żądanie do skryptu PHP i jest to w 100% sprawne, ale jak zrobić, by pobierał id z zalogowanego użytkownika? Logowanie też opiera się na PHP
viking
Sesja w php działa na zasadzie trzymania id w cookie lub przekazywania id sesji w adresie. W jaki sposób informujesz php ze strony javy że jest to konkretne id sesji?
Syene
Ze strony javy nie informuje w żaden sposób. Raczkuje w tym temacie dlatego 'w przedszkolu' napisałem biggrin.gif

Sądziłem, że przy pomocy 'include login.php' umieszczonego w pliku PHP wyszukiwania on wie, że sesja z tamtego pliku ma zostać pobrana i że nie potrzebuje dodatkowych kodów w javie, skoro tam jest tylko wyświetlanie, a samo wysyłanie zapytania do bazy i sesje dzieją się w PHP
viking
Sesja musi być jakoś powiązana między klientami a php. Dlatego najczęściej używa się tokenów jwt lub innych bearer tokenów wysłanych z nagłówkami. W najprostszej postaci możesz po zalogowaniu wygenerować hash który sobie zapiszesz po stronie aplikacji.
sazian
Nie wiem jak to robisz po stronie JAVY ale prawdopodobnie najłatwiejszą opcją będzie dodanie obsługi ciasteczek.
Możesz tez zrobić własną obsługę sesji https://www.php.net/manual/en/session.customhandler.php i uwierzytelniać się/identyfikować inną metodą niż ciasteczko.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.