ugrás a tartalomhoz

A $_SESSION PHP tömbök MySQL adatbázisban tárolása

i · 2014. Feb. 8. (Szo), 14.03
Sziasztok!

Szeretném a $_SESSION tömböket fájlok helyett MySQL adatbázisban tárolni. Rengeteg példa van erre a neten, többek között ez is:

How to Create a Secure Session Managment System in PHP and MySQL

Szép megoldásnak találom, de amit szemet szúr, hogy az illető miért nem használ adatbázisban DATE, DATETIME vagy TIMESTAMP mezőt CHAR(10) helyett?

A szép és logikus kódolás mellé ez valahogy annyira logikátlan. Miért így tárolja a dátumot? A könnyebb kezelhetőség érdekében vagy a gyorsaság miatt vagy jól látom, hogy ide nem CHAR(10) kéne?

A tábla:
CREATE TABLE `sessions` (
  `id` CHAR(128) NOT NULL,
  `set_time` CHAR(10) NOT NULL,
  `data` text NOT NULL,
  `session_key` CHAR(128) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Még amit nem értek, hogy van ugye az open függvény. Miért nincs lekezelve annak a hibának a lehetősége, hogy nem sikerül a csatlakozás? Ha nem sikerül a kapcsolat, akkor nem működnek a $_SESSION változók sem ami véleményem szerint igencsak nagy hiányosság.

A függvény:
function open() {
   $host = 'localhost';
   $user = 'sec_user';
   $pass = 'eKcGZr59zAa2BEWU';
   $name = 'secure_sessions';
   $mysqli = new mysqli($host, $user, $pass, $name);
   $this->db = $mysqli;
   return true;
}
Egyéb észrevétel, javaslat azzal kapcsolatban, hogy így szeretném tárolni a $_SESSION tömböket?
 
1

Szeretném a $_SESSION

Hidvégi Gábor · 2014. Feb. 8. (Szo), 14.11
Szeretném a $_SESSION tömböket fájlok helyett MySQL adatbázisban tárolni
Miért? Csak azért kérdem, mert az eddigi kérdéseid és válaszaid alapján még nem vagy azon a szinten, hogy olyan alkalmazást fejlessz, amihez ez szükséges. A php beépített, fájl alapú munkamenetkezelője nagyon sokáig biztonságos és gyors megoldást nyújt a problémára.
2

$_SESSION

i · 2014. Feb. 8. (Szo), 14.35
Őszintén szólva én nem szeretnék ebben a szakmában elhelyezkedni. Csak egyetlen honlap projektet szeretnék megvalósítani és azt szeretném ha ez nagyon rendben lenne. Nem szeretném később foltozgatni és szeretnék a fájl feltöltéseken kívül mindent MySQL adatbázisban tárolni így a $_SESSION tömböt is.
3

Őszintén szólva én nem

Hidvégi Gábor · 2014. Feb. 8. (Szo), 15.13
Őszintén szólva én nem szeretnék ebben a szakmában elhelyezkedni (...) azt szeretném ha ez nagyon rendben lenne
Nem fog menni, hacsak nem valami nagyon egyszerű dolgot fejlesztesz, egy projektnek ezer buktatója van, évek kellenek, mire megtanulod mondjuk a php-t készségszinten használni. Ha tényleg csak egy oldalról van szó, továbbra is úgy gondolom, jobban jársz, ha megbízol egy céget.

A munkamenet adatbázisban való tárolása tipikusan az a kérdés, amivel csak akkor kell foglalkozni, ha probléma merül fel vele kapcsolatban, mert a szerver nem bírja a terhelést. Én a helyedben elfelejteném az ügyet, és inkább megtanulnék angolul, azzal ezerszer többet érsz.
4

Nagyon egyszerű a dolog. Van

i · 2014. Feb. 8. (Szo), 15.37
Nagyon egyszerű a dolog. Van összesen 2-3 admin akik belenyúlhatnak a tartalomba és be-, illetve kijelentkezhetnek. A látogatók nem szólhatnak hozzá semmihez, nem léphetnek be, nem regisztrálhatnak. Ők csak olvasnak (SELECT). Az adminok olvasnak is meg írnak is (+INSERT, +UPDATE). Az adminok csak flag-elhetnek adatbázisban, tehát nem törölhetnek sorokat. Erre egy főadmin képest csak (+DELETE). Tehát ez egy többnyelvű blog. Már majdnem minden meg van az induláshoz. Még ezt kéne megoldani a $_SESSION tömböket, illetve egy-két dolgot szeretnék MySQL triggerekkel, függvényekkel és eljárásokkal megvalósítani. Ezek létezéséről eddig nem tudtam így ezért nem is terveztem használni őket. Most viszont ezek egy csomó jó lehetőséget hordoznak magukban.
5

Ne tedd

Hidvégi Gábor · 2014. Feb. 8. (Szo), 16.12
A MySQL triggerekről, függvényekről és eljárásokról lebeszéllek, mert nehézkes menedzselni őket: macerás szerkeszteni, a hibakeresés pocsék, a programozási lehetőségek korlátozottak, a programlogikától "távol" vannak, sebességben pedig nem (vagy nem sokkal) gyorsabbak, mintha php-ban oldottad volna meg ugyanazt a feladatot.

Az eredeti elképzelés jó, de a MySQL megvalósítása hagy kívánnivalót maga után, a PostgreSQL ebben például sokkal jobb (és egyre inkább úgy tűnik, hogy nem csak ebben).