Starší komentáře ke článku: Sessions ve světle superglobálních proměnných

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Ondrej Ivanic

Datum vložení: 26.6.2003 0:43:00

session.use_trans_sid sa neda zmenit pomocou ini_set() lebo je PHP_INI_SYSTEM alebo PHP_INI_PERDIR (zmenit sa da v php.ini, httpd.conf alebo .htaccess)

Avatar

Autor komentáře: karel

Datum vložení: 26.6.2003 8:58:50

přesně tak, to co se píše v článku je nesmysl

Avatar

Autor komentáře: Pavel Černý

Datum vložení: 26.6.2003 17:02:55

Je sice pravda, že session.use_trans_sid je PHP_INI_SYSTEM|PHP_INI_PERDIR, ale mi se zatím na každém hostingu povedlo ji vypnout pomocí ini_set() tak, jak píše autor. Taky nejsem zrovna priznivce automatickeho dosazovani do odkazu. Mohl by mi někdo vysvětlit, jak je to tedy ve skutečnosti? Dekuji...

Avatar

Autor komentáře: stevo

Datum vložení: 26.6.2003 19:39:39

cefte. mne sa tiez podarilo vypat session.use_trans_sid cez ini_set(). clanok som este necital cely, ale podla mna to autor napisal dobre. Je pravda, ze to mne doma na localhoste (windows) neslo, lebo tam treba restartnut cely system aby sa zmeny v php.ini prejavili. Ale na host.sk sa mi podarilo bez problemov.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 26.6.2003 20:20:41

Ano, nejsme první, kdo si všiml, že to někdy funguje. I v konferenci PHP developeři přiznávají:

actually is functional using ini_set("session.use_trans_sid", "0"); somewhere in your code (before session_start();)

Zatím se k tomu nikdo nevyjádřil "oficiálně", zda jde o bug či užitečnou futuru ;-)

Avatar

Autor komentáře: Vita

Datum vložení: 26.6.2003 20:28:51

Mohu se optat kdo to tu tak radostne promazava? Ne ze by to nebylo obcas uzitecne ale treba ten muj ranni prispevek zmizet nemusel a bylo tam par vypichnutych malickosti (ten odpoledni byl jen dotaz proc to zmizlo a je taky pryc) :(

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 26.6.2003 21:40:20

Opět opakuji, že na server má přístup pouze správce, jeho zástupce a já, přičemž ti dva lidé nemají s Inervalem jako takovým nic společného. Takže tady nikdo nic radostně nepromazává. I kdyby se o to pokusil, zjistil bych to podle logů ;-)

Avatar

Autor komentáře: Vita

Datum vložení: 26.6.2003 23:16:53

Ale pane Malek, skutecne vas ubezpecuji ze tu BYLO vic prispevku. Jeste i v poledne tady chvili bylo 5 a potom 4!

Nevim jake mate logy ale neni to poprve co tohle registruji.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 26.6.2003 23:31:20

Pokud pominu problem pristupovych prav, pochybuji, ze by se to nekomu povedlo vymazat prispevek z teto diskuse, aniz bych to zaregistroval, nebot mam titulni stranku Intervalu nastavenu jako podklad pracovni plochy s automatickym reloadem kazdych deset minut a dnes jsem byl od deseti hodin rano az do peti vecer neustale u pocitace, nehlede na to, ze prave tento clanek jsem sledoval i proto, ze se sam PHP intenzivne venuji. Co se tyce logu, provadi se samozrejme zapis vsech akci SQL serveru, takze se domnivam, ze by bylo opradu obtizne takovou operaci provest. Samozrejme, pokusim se to s nekym zkonzultovat, jakekoli podezreni na problem tohoto typu mne velmi zneklidnuje ;-(

Avatar

Autor komentáře: Vita

Datum vložení: 27.6.2003 10:24:51

Vcera jsem tu postoval tesne po pulnoci nekolik malickosti - jako treba ze i pri kontrole session by bylo dobre kontrolovat napr. operacni system, verzi prohlizece a IP adresu (odkazujic na clanek co tu vysel driv, tusim ze to byl e-shop ci class na autorizaci).

Vcera v poledne tady byl cisi prispevek (ale uz nevim o cem) ktery nasledne zmizel.

Ja jsem pote postl dotaz ze by se to nemuselo tak zbesile promazavat - a ten je taky pryc ;)

Zkuste hledat podle data pridani a kdo to postl, treba tam je jen nejaky buggik - jmeno bylo urcite 'Vita' a cas postnuti vcera. Treba to neni smazane, treba je to jen bez id clanku nebo je id spatne.

Avatar

Autor komentáře: stevo

Datum vložení: 26.6.2003 20:45:36

ja neviem moc dobre anglicky, alemne z toho vypliva ze ked ini_set("session.use_trans_sid", "0"); pouzijem niekde pred session_start(); tak to funguje... nie???

Avatar

Autor komentáře: Jan Dudek

Datum vložení: 26.6.2003 21:18:41

Mam takovy pocit, ze direktiva session.use_trans_sid by spise mela byt PHP_INI_ALL nez PHP_INI_SYSTEM|PHP_INI_PERDIR (taky pokud se podivate do dokumentace, tak je to jedina direktiva session.*, ktera neni PHP_INI_ALL). Nicmene tomu tak neni. Ale jak uz tu bylo nekolikrat zmineno, proste to funguje. Nechtel jsem to v clanku prilis rozmazavat, snazil jsem se jej napsat spise pro zacatecniky. Z cehoz asi prameni tyhle nejasnosti, za ktere se omlouvam...

autor

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 26.6.2003 23:40:46

Problém je IMHO o to komplikovanější, že (takřka) všechny direktivy session.* sice jsou PHP_INI_ALL, ale přitom ne všechny skutečně projevují kýžený efekt i když jsou zapsány například ve skriptu. IMHO jde o pochybení vývojářů a příslušné direktivy by měly být přeřazeny do odpovídajících skupin ;-(

Avatar

Autor komentáře: spud

Datum vložení: 26.6.2003 9:25:14

%subj% - to je POUZE pro vypnute cookies?

a kdyz uz se preda v URL, funkce session_start() z ni automaticky natahne informace ze serveru, nebo se musi nekam musi pridat jako parametr pri volani?

Avatar

Autor komentáře: Ondrej Ivanic

Datum vložení: 26.6.2003 11:05:26

1) SID moze byt v cookie
2) SID moze byt v url
Ak uzivatel nema povolene cookie je ziaduce predat tuto informaciu inac a to pomocou url.

funkcia session_start() moze fungovat asi takto:
1) v poli $_REQUEST[] najde premenu podla nazvu session.
2) Ak existuje natiahne session data, ak nie vytvori novu session.

Po dlhom case som session zacal robit takto:
1) session startujem len ked potrebujem, nikdy nie automaticky, pouzivam cookie
2) na zaciatku nastavim cookie 'cookie_ok = 1'
3) ked potrebujem session zavolam session_start()
4) mam funkciu v style getURL() ktora vrati url a podla toho ci je session aktivna a podla existencie $_COOKIE['cookie_ok'] vlozi este aj SID do url.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 26.6.2003 23:50:00

Nesouhlasím s názorem, že použití session.use_trans_sid je nebezpečné, protože by mohlo vést k vyzrazení SID prostřednictvím odkazu mířícího mimo systém. Pokud je totiž umožněno automatické vkládání SID do URL, děje se tak pouze u relativních odkazů, nikoli u odkazů absolutních, které by skutečně mimo systém vést mohli. IMHO zakazováním session.use_trans_sid se programátor připravuje o polovinu všech výhod, které práce se sessions přináší.

Avatar

Autor komentáře: Jiří Kocman

Datum vložení: 27.6.2003 1:10:26

Osobně jsem se zbavil veškerých výhod sessions v PHP a používám vlastní "session handler" který funguje k mé naprosté spokojenosti. Data se ukládají do databáze. Mohu při inicializaci session rozeznat zda je "SID" v cookie nebo v get ci post datech a ignorovat některý z těchto údajů, zároveň provádim kontrolu IP adresy před "ukradenim" session, stejně tak jde nastavit zda bude SID posílán v COOKIE či v GET/POST požadavku, v neposlední řadě mohu nastavit timeout session bez nutnosti měnit nastavení PHP. Celý tento systém je řešený jako extend layeru pro databázi, takže cála inicializace se provádí při volání konstruktoru třídy, která připraví session data a zároveň mě připojí k databázi.

Avatar

Autor komentáře: Arthur

Datum vložení: 26.12.2003 14:27:39

Mel bych na Vas otazku, jak Vam muze nekdo ukradnou Session? Myslim, tim, ze kdyz to mate v databazi, jak poznate, ke kteremu navstevnikovi, ktery ten session patri? DIky

Avatar

Autor komentáře: Arthur

Datum vložení: 26.12.2003 14:27:39

Mel bych na Vas otazku, jak Vam muze nekdo ukradnou Session? Myslim, tim, ze kdyz to mate v databazi, jak poznate, ke kteremu navstevnikovi, ktery ten session patri? DIky

Avatar

Autor komentáře: Arthur

Datum vložení: 26.12.2003 14:24:03

Jaký je váš názor p. Málek na to, že když nekdo nekomu ukradne ocasek(SID) a pak se pokousi vycist co si ten dotycny uklada do sessions? Diky.

Avatar

Autor komentáře: Launcher

Datum vložení: 27.6.2003 14:57:42

Mírně offtopic - Pochopil jsem to správně tak, že pokud si předám údaje o userovi pomocí session (defaultně cookie), tak nebudu moci nalogovat více userů z jednoho počítače? Nebo je to nějak ošetřeno?

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 27.6.2003 15:16:17

Ne, nepochopil. Sessions samy o sobě nijak neovlivňují počet uživatelů, nalogovatelných z jednoho počítače ;-)

Avatar

Autor komentáře: Vita

Datum vložení: 27.6.2003 15:42:22

Nemuze byt soucasne nalogovano vic uzivatelu z jednoho prohlizece na jednom uctu jednoho pocitace. Pokud to zkusite, odhlasite druheho :)

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 27.6.2003 15:50:09

Souhlasil bych s Vaším názorem, pokud byste frázi "z jednoho prohlizece" upravil na "z jedné instance prohlížeče" ;-)

Avatar

Autor komentáře: Vita

Datum vložení: 27.6.2003 15:59:19

Njn, v opere to vyjde nastejno pokud delate s tabama :)

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 27.6.2003 19:06:56

V Opeře (a v čemkoli jiném), pokud pracujete s taby, používáte pořád pouze jednu instanci prohlížeče. Čili nechápu co to má být za argument?

Avatar

Autor komentáře: Vita

Datum vložení: 27.6.2003 19:27:37

No nic :) Ano, souhlasim, mate pravdu :)

Avatar

Autor komentáře: bubux

Datum vložení: 25.7.2003 15:26:00

Tak si tam vygenerujte nějaké jediněčné id podle času přihlášení a to si vkládejte do db a můžete se prihlasovat z jednoho browseru.... beeee ..

Avatar

Autor komentáře: HCP

Datum vložení: 2.11.2003 4:56:07

Pokud Vám dělá problém více uživatelů na jednom počítači, a chcete mít pro každého vlastní cookies, tak vytvořte každému uživatelský profil v počítači a máte klid. Cookies se nebude přepisovat mezi jednotlivými uživateli. Problém ovšem nastává, pokud máte linuxxx

Avatar

Autor komentáře: J.Kastl

Datum vložení: 30.6.2003 16:51:19

Takto se, podle mě, dají funkce spojené s PHPSESSID těžko přesně pochopit. Je třeba začít od toho, co se kdy a jak posílá v HTTP-hlavičkách. (Jinak by možná bylo dobré podívat se třeba do TinWebu a cvičně si onu několik let starou aplikaci zkusit naprogramovat "moderně" v PHP, aby bylo patrné, že KONEČNĚ je věc podporována v PHP4.)

Avatar

Autor komentáře: martin

Datum vložení: 13.7.2003 13:49:07

Zdravim, nikde som sa nevedel dopracovat k udajom ako je maximalna velkost vkladanych dat do sess. tym padom vyvodzujem, ze to nie je obmedzene??? Viem ze napriklad u cokies je to max. 20kb

Dakujem za info alebo referenciu

Avatar

Autor komentáře: cz

Datum vložení: 15.7.2003 23:26:25

imho je vicemene neomezena (asi co se vejde na disk ;]), ale da se omezit v php.ini na presny maximalni pocet bajtu

Avatar

Autor komentáře: MaReK Penguin Olšavský

Datum vložení: 13.8.2003 11:02:51

Neproběhlo to nikde v článku ani v diskuzi a tak mi nezbývá, než tuto otázku položit sám. Jak je to s životností session? Když se mi uživatel korektně odhlásí, tak je to OKi, ale co když odejde od počítače s tím, že jenom schodí prohlížeč? To mi pak jako zůstane session viset na serveru až do soudného dne, nebo do doby, než ji sám smažu? Ví někdo jak nastavit její životnost?

Avatar

Autor komentáře: HCP

Datum vložení: 2.11.2003 4:59:02

Životnost cookies můžeš defaultně nastavit už když ji spouštíš. Jenom si teď bohužel nevzpomenu, jaká je ta syntaxe, protože jsem v práci.

Avatar

Autor komentáře: Jan S.

Datum vložení: 12.11.2003 19:53:12

Opravdu nikdo nevite, jak to nastavit? me by taky zajimalo, aby se mi nezapraskal server.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 12.11.2003 20:53:25

Životnost sessions se nastavuje v .ini souboru, vyhledejte si parametry "session.cookie_lifetime" a následující ;-)

Avatar

Autor komentáře: Butr

Datum vložení: 23.2.2004 18:02:27

No tak se mi po precteni vsech clanku o session podarilo vytvorit session pro uzivatele a po jeho odhlaseni ji zrusit. Nicmene jsem chtel vyuzit seassin i pro ulozeni nejakych dalsich promenych ktere bych podle potreby vymazal unset($_SESSION["user"]); a hle ono to nejde. Zjistil jsem ze kdyz posilam uzivateli nejake data tak mohu pridavat informace do seassin ale nikoli mazat!
Nevite nekdo jek zrusit nektere polozky seassion bez toho abych musel nejdrive volat soubor s unset($_SESSION["user"]); a pote prejit na dalsi stranku? Nebo v cem je problem?

Avatar

Autor komentáře: Vasek

Datum vložení: 3.4.2004 7:22:17

Jak muzu vypsat data ze sessions? Kdyz tam <? echo $user ?>, tak do nejde.

Avatar

Autor komentáře: Jméno a příjmení

Datum vložení: 20.4.2004 13:09:46

<?php echo $_SESSION['user'] ?>

Avatar

Autor komentáře: thorak

Datum vložení: 11.11.2005 22:13:36

Dobry den, chtel bych se zeptat kde delam chybu, chci pouzivat sesions, do stranky stranky vlozim session_start(); a nadefinuji si dalsi veci do pole session, po zobrazeni stranky se me zobrazi chyba: Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\inetpub\wwwroot\forum\kontrola.php:1) in c:\inetpub\wwwroot\forum\kontrola.php on line 188 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\inetpub\wwwroot\forum\kontrola.php:1) in c:\inetpub\wwwroot\forum\kontrola.php on line 188 Prosim o odpoved, dekuji Tomas Horak.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 11.11.2005 22:33:45

Jde o vůbec nejčastější problém při používání sessions a chyba je přesně v tom, v čem to hlášení píše. Používáte-li session, nesmíte generovat žádný výstup před session_start a musíte dodržet také řadu dalších pravidel. Nejlepší je zcela změnit styl "programování" a přinejmenším začít používat output buffering (viz http://interval.cz/clanek.asp?article=1063), což sebou nese i řadu různých výhod ;-)

Avatar

Autor komentáře: Fis

Datum vložení: 31.8.2007 11:18:07

Muzete generovat jakykoliv vystup pred session_start, ale pouze pokud nepouzivate cookies :) Lepsi je to samozrejme nedelat. Pozor na mezery a znaky pred zacatkem bloku s php (<?php). Co se tyce output bufferingu, otazka je ponekud slozitejsi nez se muze na prvni pohled zdat - output buffering se totiz hodi i v mnoha jinych pripadech nez ho pouze zapnout, vygenerovat stranku a poslat vysledek z cache...

Avatar

Autor komentáře: Petr Schefzu

Datum vložení: 8.4.2007 9:05:41

Prosím vás. Měl bych dotaz. Stáhl jsem si jeden systém a našel tam kontrolní soubor jehož kód je: <? //Inicializace sessionu session_start(); //Stránky pro registrované if ($_SESSION["aut"] != "SI") { //Jestliže nejste přihlášen header("Location: login.php?msg=2"); //Script odešle na přihlášení exit(); } ?> Ale toto silně označené: if ($_SESSION["aut"] != "[b]SI[/b]") jsem již v žádném souboru nenašel. Co to je či co to má za význam??

Avatar

Autor komentáře: Fis

Datum vložení: 31.8.2007 11:20:40

To znamena, ze v nekterem z predchozich kroku (na jine strance) melo byt ulozeno do promenne v session neco (SI) asi v pripade uspesne autorizace uzivatele v databazi. Kdyz to tam neni, tak autorizace neprobehla.

Avatar

Autor komentáře: Plomer

Datum vložení: 8.4.2007 19:55:59

Prosím vás pokouším se udělat registraci a přihlášení skrze session aby to bylo bezpečné ale pořád mi to nejde. Mohl by jste mi někdo pomoci? potřeboval bych např nějaký základ registrace a přihlášení s popisem abych vědel co co v daném scriptu dělá. Mockrát děkuji za jakoukoli pomoc.

Avatar

Autor komentáře: Jack

Datum vložení: 7.7.2007 20:33:20

Chci aby si délku platnosti session mohl nastavit uživatel podle výberu který mu nabídnu. Mohl by mi někdo poradit či tedy napsat script jak na to? Při přihlášená výběr na jak dlouho se session uchovají polopatě po jaké době se smažou. díky moc

Zpět na článek | Úvodní stránka Interval.cz