Starší komentáře ke článku: Začínáme používat sessions v PHP

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

Avatar

Autor komentáře: Michal Aichinger

Datum vložení: 24.1.2002 22:16:38

Cau,
pokud chce nekdo studovat v anglictine tak se muze podivat na: <a href='http://www.zend.com/zend/tut/authentication.php' target='_blank'>http://www.zend.com/zend/tut/authentication.php</a> a <a href='http://www.zend.com/zend/tut/session.php' target='_blank'>http://www.zend.com/zend/tut/session.php</a>

Avatar

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

Datum vložení: 4.6.2002 13:18:43

Nevim zda to je v clanku uvedeno, protoze jsem ho jen preletl. Je-li tak se omlouvam, ale myslim si, jestli se opet nemylim, ze tyto funkce jsou pouzitelne az od verze PHP4 a to by bylo dulezite zminit.

Avatar

Autor komentáře: Jirka Kocman

Datum vložení: 21.11.2002 9:43:04

To samozrejme neni zcela prava a clanek to uvadi, ze ve verzi 3 byly doplnky (napr PHPLib).
Mimochodem proc se zabyvat "predpotopnim" PHP3 ve kterem neexistuje velka cast hodne dulezitych funkci, nezna srovnavani identicnosti - pro PHP3 je 0 a FALSE jedno a to same, coz je samozrejme zavazna chyba. V PHP4 lze s pouzitim spravneho operatoru 0 od FALSE rozeznat ! Priklad:
PHP3: 1 == 1.0 vysledek TRUE
PHP4: 1 == 1.0 vysledek TRUE
PHP4: 1 === 1.0 vysledek FALSE - sice se jedna o stejne hodnoty, ale nikoli o stejny datovy typ (jeden je int druhy double)...

PHP4 je jednoznacne vykonnejsi i bezpecnejsi navic nabizi daleko vice veci. Napriklad pokud pracuji se smarty a predavam mu 50kB text ktery se doplni do sablony... v PHP3 to znamena mit v jedne promenne text, a pri predani do smarty se alokuje dalsich 50kB pameti ! V PHP4 je mozne predat tuto promennou odkazem, takze v pameti zabere jen par bajtu (adresu dat v pameti a mozna i jejich delku), takze PHP4 umoznuje podstatne snizovat naroky na server...

Neznam nikoho kdo by se zabyval vyvojem, respektive optimalizaci aplikaci na PHP3.

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 21.11.2002 11:28:07

Důvod existuje v podstatě jen jeden: na některých serverech se používá PHP3 a přepsání stávajících aplikací by bylo příliš náročné a nestojí za to. V tom případě se ale dá používat současně PHP3 i PHP4 a rozlišovat příponou. Pro nově psané aplikace je ale jednoznačně vhodnější PHP4.

Avatar

Autor komentáře: Mira

Datum vložení: 20.8.2002 22:32:38

Zdravím, nedávno jsem četl jeden článek (tuším na <a href='http://www.reboot.cz)' target='_blank'>http://www.reboot.cz)</a> o autorizaci v PHP za použití sessions. V tomto řešení se identifikátor session mezi stránkami asi nepředává? (fakt nevím, ale asi ne) Místo toho autor používá fci. session_id(), která údajně ono id generuje. Mohl by mi tedy někdo vysvětlit jak to teda je? Dik Mira

Avatar

Autor komentáře: Pepa Kokes

Datum vložení: 21.11.2002 7:49:25

Nevim, jak to bylo na Rebootu, ale treba ja ve svych skriptech pouzivam nejakou funkci (ktera se jmenuje treba LocalUrl, to je fuk), ktera prevezme URL, a doplni ho o identifikator session a pripadny dalsi parametry (pokud jsou potreba). Tu funkci si samozrejme pisu ja, v PHP neni. Predpokladam, ze na tom Rebootu to fungovalo obdobne.

Avatar

Autor komentáře: Stefan

Datum vložení: 21.11.2002 8:32:01

no předává ale spoléhá se pouze na cookies pokud je klient bude mít vypnuty má smůlu

Avatar

Autor komentáře: Petr Havlík

Datum vložení: 21.11.2002 9:04:19

Pokud byste si přečetli celý článek, tak je v něm napsané, že pokud jsou vypnuty cookies, tak se sessionID automaticky doplní do odkazů.

Avatar

Autor komentáře: Jirka Kocman

Datum vložení: 21.11.2002 9:44:17

Toto tvrzeni neni zcela pravdive... Doplni jej jedine tehdy pokud to dovolime v PHP.INI. Coz z duvodu zvysenych naroku na server nedoporucuji...

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 21.11.2002 11:25:00

A navíc musí být PHP kompilováno s --enable-trans-sid

Avatar

Autor komentáře: Jirka Kocman

Datum vložení: 21.11.2002 11:28:51

Tahle configure direktiva prave v PHP ini dovoli pouzivani, nicmene je to mozne zmenit i rucne - neni treba kompilovat php znovu...

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 21.11.2002 11:55:14

Pokud je podpora transparent SID zakompilována do PHP, můžete si v php.ini nastavit, jestli ji budete využívat. Pokud PHP není kompilováno s příslušnou podporou, pak transparent SID neumí a na nastavení v php.ini vůbec nezáleží.

Avatar

Autor komentáře: Jirka Kocman

Datum vložení: 21.11.2002 12:26:37

ups... nevedel jsem

Avatar

Autor komentáře: Mira

Datum vložení: 22.11.2002 22:02:32

v tomto skriptu se $sid ziskava z cookies?
<?
$MC = MySQL_Connect("server", "username", "password");
$MS = MySQL_Select_DB("db");

$SN = "autorizace";
Session_name("$SN");
Session_start();
$sid = Session_id(); //tady?
$date = Date("U");
$ad = Date("U") - 300;

$MSQ = MySQL_Query("SELECT * FROM autorizace WHERE (id = '$sid') AND (date >= $ad)");

If (MySQL_Num_Rows($MSQ) <> 1):
echo "Neautorizovaný přístup";
Exit;
Else:
$MSQ = MySQL_Query("UPDATE autorizace SET date = $date WHERE id = '$sid'");
Endif;
MySQL_Close($MC);
?>

Avatar

Autor komentáře: LoWang

Datum vložení: 13.12.2002 18:47:20

Nojo dyť říkám, že tadle funkce vrátí session id a je jedno, jestli se session předává přes cookies anebo v URL. Z tohodle příkladu nepoznáš, jestli se to děje přes URL nebo přes cookies. Je to ale jedno, protože to záleží na klientovi. Session_id prostě vždycky vrátí ID nehledě na to jestli se to předává přes cookies nebo parametr v URL.

Avatar

Autor komentáře: LoWang

Datum vložení: 13.12.2002 18:43:10

funkce session_id vrátí ID session a nijak nezajišťuje jeho předávání. Pokud v článku na reboot.cz nebyla zmínka o konstantě SID, která se předává v URL, tak asi prředpokládali, že session se automaticky předává pomocí cookie - potom není třeba aby v URL byl parametr SID.

Avatar

Autor komentáře: martinwp

Datum vložení: 21.11.2002 4:19:17

Preco zapisovat do DB ipcky ved davno zname ze ipcky niesu bud stabilne, alebo jednu ip mat mat viac uzivatelov. Bol som svedkom toho ako sa klientovy meni IP na kazdej stranke na inu. A co potom? A conato rychlost aplikacie tych navstevovanjsich webou, ked napr. po autentifikacii sa overuje sess. v kazdom skripte? Ale ak neberem do uvahy tu DB vs. IP tak jeto dobry clanok.

Avatar

Autor komentáře: Petr Havlík

Datum vložení: 21.11.2002 9:11:36

Změna IP na každé stránce je velmi nepravděpodobná, pokud ovšem klient nechce znemožnit vystopování. Pokud ano, tak má prostě smůlu. Co se týká stejného IP, tak to je problém. Ale v tom případě by případný útočník musel mít přístup ke stejnému proxy serveru.

Avatar

Autor komentáře: Jirka Kocman

Datum vložení: 21.11.2002 10:00:14

Osobne jsem si napsal vlastni session handler, ktery kontroluje expiraci a zmenu IP. Pokud neni sess id vytvarim novou, pokud expiruje nebo se zmeni IP tak opet vytvarim novou. Cele to je extenze nad tridou pro pristup do databaze a pri zavolani konstruktoru se provadeji zakladni testy.
Session se ukladaji do databaze. Data lze ruzne pri zapisu kryptovat a pri cteni opet decryptovat. Sess id si pak muzu predavat bud pomoci odkazu nebo cookie, ktere muzu nezavisle na nastaveni php pridelovat jakoukoli platnost.
Velkou vyhodou je spojeni s logovanim. Pokud se nekdo prihlasi vlozim si do session klic napriklad LOGED = 1. Pokud tam tenhle klic bude tak vim ze je nalogovany, a nemusim uz psat kontrolu zda se nekdo nesnazi o ukradeni session, protoze o to se stara jiz muj session handler...
Pokud na strance potrebuji testovat zda je clovek prihlaseny, tak si testnu jen ten klic LOGED. Podle toho se pak muzu zaridit. Navic kdyz pri volani testu funkci reknu ze je vyzadovan login, tak me to okamzite vrati stranku s logovacim formularem a po odeslani teto stranky se clovicek ocitne opet na te strance ktera by se mu zobrazila misto logovaciho formu.
Uplne super je ze cele se to pak da napsat ve smarty bez nutnosti zasahu do PHP :-)

Howg

Avatar

Autor komentáře: Luboš

Datum vložení: 21.11.2002 9:26:44

Se sessions potize nemam, ale s cookies ano, neni nekde nejaky clanek o jejich pouziti ? nic jsem nenasel.
Take problem, ze kdyz volam
if ($HTTP_COOKIE_VARS['anketa2'])
{
tak jelikoz jeste anketa2 neexistuje, tak mi to vyhodi chybu, ze nezna anketa2. Ale skript funguje, normalne dale vse zapise, atd. ale je blbe, kdyz uzivatel vidi chybu a pod hlasku, ze vse probehlo v poradku. Diky za radu.

Avatar

Autor komentáře: Jirka Kocman

Datum vložení: 21.11.2002 9:35:16

Error reporting je nastaveny i na zobrazovani NOTICE - tzn warringu. PHP tak varuje na praci s neinicializovano promennou. Reseni jseou dve - inicializovat promennou v pripade pokud je prazdna (tohle doporucuji, protoze v jinych programovacich jazycich je celkem zvykem inicializovat a urovat typ promennych). Druhy je nastavit v php.ini error reporting bez notice.

Avatar

Autor komentáře: Michal Kubeček

Datum vložení: 21.11.2002 11:22:53

if (isset($_COOKIE["anketa2"]) && $_COOKIE["anketa2"])

Avatar

Autor komentáře: ŠtuPe

Datum vložení: 22.11.2002 8:35:40

Nevím to přesně, ale existuje i místní potlačení výpisu chyby/varování @ před zápisem, kde očekáváte, že může vzniknout takové varování. Např. $fHND = @fopen(datDir.$f, 'r'); Nač zjiš'tovat if(FileExists(...

Avatar

Autor komentáře: Petr Spálený

Datum vložení: 21.11.2002 20:12:38

Dost mi na Intervalu chybí článek, který by se sessions zabýval na praktickém příkladu. Jsou tu sice útržky, ale komplexně shrnuto to není. Třeba jak vytvořit přihlašování, kde by se kombinovaly sessions, kontrola IP a unikátní heslo jako zábrano proti vykrádání. Myslím, že by to bylo dobré pokračování skvělého článku o registraci uživatelů.

Avatar

Autor komentáře: Martin WP

Datum vložení: 22.11.2002 5:12:14

... pripajam sa, dobra poznamocka.

Avatar

Autor komentáře: Lubomir

Datum vložení: 17.12.2002 22:17:25

Pouzitelny navod se solidnim komentarem jsem nasel na :

<a href='http://www.digiways.com/articles/php/sessauth/' target='_blank'>http://www.digiways.com/articles/php/sessauth/</a>

Avatar

Autor komentáře: Pajax

Datum vložení: 22.11.2002 23:48:25

Jo taky bych neco takoveho bral. Login v PHP co nejbezpecneji - pokud mozno strucne jasne prehledne, nejlip na prikladu.

Neco o sessions je tady ale je to obecne:
<a href='http://www.kosek.cz/clanky/php4/session.html' target='_blank'>http://www.kosek.cz/clanky/php4/session.html</a>

Avatar

Autor komentáře: BigZ

Datum vložení: 30.11.2002 14:16:46

Taky se pripojuju. Clanek v cestine na toto tema mi dost chybi.

Avatar

Autor komentáře: Lukáš Němec

Datum vložení: 10.4.2003 21:21:28

Lidi, asi budu mít úplně trapný dotaz: Maže se skutečně dočasný soubor s parametry vytvořený PHP na serveru po např. zavření okna prohlížeče (a tím zároveň ukončení session) ?
Jsem si téměř jist, že ano (jinak by mohlo velice rychle dojít k přeplnění adresáře), ale doma na Win s PHPTriad mi tam session soubory zůstávají viset :-(

Avatar

Autor komentáře: Pavel Růžička

Datum vložení: 10.4.2003 22:47:54

Dobrý den,

povaha protokolu HTTP vylučuje obsloužit něco jako "zavření okna prohlížeče", o tom, jestli jste prohlížeč zavřel, nebo si jeho kopii otevřel v 10 dalších oknech, se server nedozví.
Existuje na serveru čistící mechanismus, který čas od času sessions s vypršeným časem vymaže - viz. nastavení php.ini

Avatar

Autor komentáře: Petek

Datum vložení: 19.7.2003 1:48:45

No nejlepe bude kdyz do te stranky das nejakou reakci na zavreni okna. Nejlepe asi funkce psana primo do BODY tagu jako onUnload="go();"
a pak si v te same strance definujes javascript funkci go(); a v ni das otevreni okna napr. logout.php ,, dale pak v tom logout.php das
<?php
session_start();
session_destroy();
?>

a tim se ti umaze ze serveru session.

Avatar

Autor komentáře: Tom

Datum vložení: 19.7.2003 10:25:57

To se tedy neumaže, jenom se označí za neaktivní. Kdy, jak a jestli se odmaže záleží výhradně na serveru, na jeho nastaveních...

Avatar

Autor komentáře: Jiper

Datum vložení: 16.6.2005 15:14:20

Heh...tak se teď - o dva roky později :-D přidávám k prosbě o praktický ČESKÝ příklad

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