Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] sesja w bazie
Forum PHP.pl > Forum > Przedszkole
szybki
Używam kodu https://github.com/kazitanvirahsan/PHP5.4-D...session_inc.php na PHP 5.4

Dodatkowo w bazie utworzyłem kolumnę z datą dodania ID... Jednak gdy podczepię ten kod i dam
  1. $_SESSION['asda'] = 'xxx';
To nic do bazy nie zostaje zapisane, ale zmienia się data aktualizacji.

Czy w PHP trzeba coś jeszcze ustawić, aby móc zapisywać sesję do bazy?
nospor
Pokaz poprawki jakie zrobiles, bo byc moze namotales cos
szybki
Bez poprawek też nie działa, sprawdziłem zmienną $data przed zapisaniem do bazy i jest pusta.

  1. public function write($id, $data)
  2. {
  3. var_dump($data); // pusta
  4. $access = time();
  5.  
  6. $stmt = $this->db->pdo()->prepare('REPLACE INTO sessions(id,timestamp,data) VALUES (:id, :timestamp, :data)');
  7.  
  8.  
  9. $row_affected = $stmt->execute(array(':id'=>$id , ':timestamp' => $access, ':data'=>$data));
  10. return $row_affected;
  11. }
nospor
Temat: Jak poprawnie zada pytanie

Masz tam napisane jak włączyc wyswietlanie bledow. Pewnie masz jakies
szybki
Obsługa wyświetlania błędów jest włączona. Żadnego nie ma. PHP nie przesyła danych do tej metody poza swoim ID sesji...
nospor
A pokaz jeszcze swoj kod, jak inicjalizujesz te sesje i jak uzywasz
session_set_save_handler
szybki
Ok, znalazłem. Problemem była literówka w zmiennej globalnej biggrin.gif Hmm a teraz pytanie odnośnie sesji w bazie. 1 rekord to 1 użytkownik, zakładając że trymam jego login w sesji to jest on zapisany jako json i teraz... Chciałbym tego użytkownika wywalić, aby się wylogował, nie ma sensu kasować sesji dla wszystkich... tylko jak go odszukać w tym json? Czy przeszukiwać bazę czy dodać do niej kolumnę o nazwie/id użytkownika?
nospor
Dodanie ID uzytkownika jako kolejne pole byłoby raczej wskazane
szybki
Tylko jak to rozwiązać. session start jest tuż po sessionhandling, ID nadawany jest po auth, więc jeśli użytkownik się zaloguje to zrobić update na klucz sesji?
nospor
Tak samo jak dodales pole z czasem, tak samo masz dodac pole z ID uzytkownika.
Zapisujac dane do bazy, pobierasz z $data id uzytkownika i wkladasz tak samo jak wkladales czas.
szybki
Hmm jednak ten kod nie działa. Już pomijam implementacje u siebie. Jak rozpakuję paczkę z kodem, stworze bazę danych odpalam index a w nim to, tak jak w przykładowym kodzie:

  1. <?php
  2. include_once 'db_session_inc.php';
  3. $_SESSION['name'] = 'My name is Kazi Ahsan.';
  4. $ses_id = session_id();
  5. echo $ses_id;
  6. //session_destroy();
  7. ?>


I to działa, sesja jest zapisywana w bazie... ale, jak już wpisze adres w przeglądarce index.php?cokolwiek=zxc to sesja znika, nie ma żadnych danych.
nospor
Wyswietlanie bledow ma byc ustawione NA SAMYM POCZATKU a nie w srodku.... I masz wlaczyc tez wyswietlanie, atego nie widze. Wszystko jak masz zrobic, masz napisane w linku co ci podalem wczesniej
szybki
Pisałem już, że kod nie wyświetla żadnych błędów.

  1. <?php
  2. ini_set('display_errors','1');
  3. include_once './class/db_session_inc.php';
  4.  
  5. if(isset($_GET['test']))
  6. {
  7. $_SESSION['cokolwiek'] = 'xxx.';
  8. }
  9. var_dump($_SESSION);
  10. //session_destroy();
  11. ?>


Jak przejdę na stronę index.php?test sesja zapisuje się do bazy i jest wyświetlona w tablicy, jak przejdę na inną, baza jest czyszczona, zostaje sam klucz, a sesja znika.

Albo czy macie może sprawdzone metody trzymania sesji w bazie, jakieś inne klasy w oparciu o PDO?
!*!
Cytat(szybki @ 17.02.2015, 12:36:17 ) *
Bez poprawek też nie działa, sprawdziłem zmienną $data przed zapisaniem do bazy i jest pusta.


Kod działa poprawnie, skoro zmienna jest pusta to ją nadpisujesz.

Cytat(nospor)
Tak samo jak dodales pole z czasem, tak samo masz dodac pole z ID uzytkownika.
Zapisujac dane do bazy, pobierasz z $data id uzytkownika i wkladasz tak samo jak wkladales czas.


To się nie sprawdzi, bo to że tworzysz sesje nie znaczy że jesteś zalogowanym użytkownikiem, więc dodatkowe pole jest zbędę przy null/0. SQL pozwala na wyszukiwanie danych w json.
nospor
Cytat
To się nie sprawdzi, bo to że tworzysz sesje nie znaczy że jesteś zalogowanym użytkownikiem
No i? A co ma do tego brak zalogowania? Jak nie bede zalogowany to bede tam miał właśnie 0. Tak samo jak w json bedzie 0. Wiec sie sprawdzi jak najbardziej ok.
!*!
To wykracza poza zakres logiki tej klasy, która ma obsługiwać sesje, a nie dodatkowe dane o użytkowniku.
nospor
Zawsze logike klasy można rozszerzyć by móc z niej jeszcze lepiej i wydajniej korzystać
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.