Diskuze: $_SESSION
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ano, vnímáme opravdu injekce, to bys měl řešit jako první.
Neuvažuješ už opravdu nad nějakým viditelným linkem, když uživatel zakládá vlákno v sekci PHP, na PDO nebo alespoň ty sql injekce. Vždyť tu ty injekce řešíme donekonečna stále dokola
Zatím není kam odkazovat, základy databází v PHP je poslední neaktuální sekce, musím ji nejprve aktualizovat. Injekcím a PDO samozřejmě věnuji samostatný článek, na který tu budeme odkazovat.
nech si vypsat to $loguser["login"] jestli náhodou není prázdný
Nefunguje ti to proto, že session_start() můžeš volat jen před výpisem, tedy na začátku skriptu.
Před require?
Jinak mě toto fungovalo, nevím proč teď ne. (MYSLÍM STEJNÝ ZÁPIS)
Před session_start() vypisuješ HTML formulář. To vyvolá odeslání HTML hlavičky a session_start() ji již nemůže modifikovat.
session_start() a header() by som da este pred zobrazenim formulara, lebo
kazdezobrazenie textu, vratane aj prazdneho riadka sposobi poslanie hlavicky
a PHP sekvenciu u vkladanych dokumentov by som neukoncoval, lebo niektore
editory na koniec este pridavaju novy riadok, alebo aj ty sa pomylis a zabudnes
na odriadkovanie, co sposobuje tiez posielanie prazdneho riadkA
a ked PHP parser dojde na koniec neukoncenej PHP sekvencie, nevypise ziadnu
chybu, automaticky ju ukonci a Apache okrem spracovaneho vysledku neposle nic,
ani en nechceny riadok, ktory sa do zdrojaku dostal nedopatrenim
Ten formulář stejně patří až na konec. Máš to nějaké přeházené.
session_start musi byt pred zaciatkom skriptu(aj pred HTML, prelepsiu orientaciu kukni nieco o MVC patterne).
A dovod preco ti to predtym fungovalo, no pravdepodobne si pracoval na localhoste popripade zle nastavenom serveru, ktoremu to nevadilo.
nielen session_start(), ale v tomto pripade by som cely PHP kod uviedol na zaciatok a na prvy riadok uviedol session_start(), za nim header(), ale nastavenie premennej $_SESSION[] moze byt hocikde v skripte, nemusi byt presne na zaciatku PHP kodu, tam,kde sa hodi, lebo tato premenna samotna definuje udaje,ktore sa maju ukladat v sessions...
aby som to ujasnil,funkcia session_start() nastavuje prostredie na ukladanie udajov o sessions, musi byt volana este skor, nez sa ma nieco poslat prehliadacu, cize by nemal byt pred:
<?php
session_start();
.
.
.
ani prazdny riadok, ani nic, co by mohlo poslat browseru nejaku
hlavicku...
aj preto mu to nemusi fungovat
dalej mu to nemusi fungovat aj pre to, ze nema nastavenu spravne premennu pre docasne subory na strane servera
V PHP se mi osvědčilo nepřistupovat k $_SESSION přímo, ale přes vlastní třídu, která mě od session_start() odstíní.
class Session {
public static function getCurrent() {
if (session_id() === '') {
session_start();
}
return new Session;
}
protected function __construct() {
}
public function setAttribute($name, $value) {
$_SESSION[$name] = $value;
}
public function getAttribute($name) {
if (isset($_SESSION[$name])) {
return $_SESSION[$name];
}
return null;
}
public function removeAttribute($name) {
unset($_SESSION[$name]);
}
}
Možná by se použitelnost o něco zlepšila, kdybys ty metody přejmenoval. Třeba takto:
<?php
class Session {
public static function getCurrent() {
if (session_id() === '') {
session_start();
}
return new Session;
}
protected function __construct() {
}
public function __set($name, $value) {
$_SESSION[$name] = $value;
}
public function __get($name) {
if (isset($_SESSION[$name])) {
return $_SESSION[$name];
}
return null;
}
public function __unset($name) {
unset($_SESSION[$name]);
}
}
Jinak to blbnutí se Singletonem mi připadá v daném případě poněkud zbytečné. Netuším, v čem se ti tento přístup osvědčil. Lépe se to testuje?
Díky moc za tip. Property overloading v PHP jsem neznal. Ještě mi tam chybí __isset.
Zobrazeno 18 zpráv z 18.