Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemZamknutoVyřešeno nepredava se PHPSESSID v cookie

Zdravim,

mel bych dotaz ohledne session v php. Na lokalnim stroji staci zavolat session_start(), automaticky se nastavi cookie a vse funguje bez problemu.

Na serveru vsak neni cookie generovana a po kazdem zavolani session_start() se vytvori nova session. Pomoci Firebugu a Web Developera jsem overil, ze ji nedostanu, a tak se ani nepredava.

Otazka tedi zni, jak se dat nastavit predavani PHPSESSID pomoci cookie? Jen upozornuji, ze server je hosting, tudiz nejsem admin.

Diky za kazdou radu.

Nastaveni serveru je:

Session Support 	enabled
Registered save handlers 	files user sqlite
Registered serializer handlers 	php php_binary wddx

Directive	Local Value	Master Value
session.auto_start	Off	Off
session.bug_compat_42	On	On
session.bug_compat_warn	On	On
session.cache_expire	180	180
session.cache_limiter	nocache	nocache
session.cookie_domain	no value	no value
session.cookie_httponly	Off	Off
session.cookie_lifetime	0	0
session.cookie_path	/	/
session.cookie_secure	Off	Off
session.entropy_file	no value	no value
session.entropy_length	0	0
session.gc_divisor	100	100
session.gc_maxlifetime	1440	1440
session.gc_probability	0	0
session.hash_bits_per_character	4	4
session.hash_function	0	0
session.name	PHPSESSID	PHPSESSID
session.referer_check	no value	no value
session.save_handler	files	files
session.save_path	/var/lib/php5	/var/lib/php5
session.serialize_handler	php	php
session.use_cookies	On	On
session.use_only_cookies	On	Off
session.use_trans_sid	0	0

Edit: po dalsim testovani jsem zjistil, ze neprichazeji ani cookies, co nastavim rucne - treba:

SetCookie ("PHPSESSID", session_id());
SetCookie ("nazev_cookie", "hodnota");

Poze 4 cookies prijdou - __utmz, __utma, __utmc, __utmb

Co je spatne?

Předmět Autor Datum
__utmX cookies jsou od Google Analytics. Zkusil bych si pohrát s nastavením adresáře a domény, někt…
navay 28.09.2010 02:42
navay
tak jsem navic zkousel (domena zustava zatim utajena, ale pouzil jsem stejnou - realnou, jako ty od…
gd 28.09.2010 18:06
gd
Já mám phpinfo prakticky stejné, akorát místo: session.use_only_cookies On Off mám: session.use_only…
navay 28.09.2010 20:01
navay
Tak se to konecne podarilo zprovoznit. Start_session() se musi poustet pred jakymkoliv vystupem do…
gd 01.10.2010 20:01
gd
Můj druhý řádek v indexu, hned po <?php je ob_start(); :-). Že občas dělá problémy BOM vím jen z růz…
navay 03.10.2010 05:03
navay
Psano v PSPadu, ale zeditovano kvuli drobnosti v notepad.exe. A pak se to jiz vezlo... 8-) nicméně…
gd 03.10.2010 09:18
gd
Na serveru vsak neni cookie generovana a po kazdem zavolani session_start() se vytvori nova session…
hynajs 28.09.2010 10:39
hynajs
dostaneš pokaždé jiné id ? - to sis jistě ověřil, že ano. Ano, to jsem si overil jako prvni. Z jin…
gd 28.09.2010 17:45
gd
Měl jsem uplně stejný problém. Sessions fungovaly na lokále, kde jsem je původně testoval, ale jakmi… poslední
Zao 04.02.2012 13:41
Zao

__utmX cookies jsou od Google Analytics.

Zkusil bych si pohrát s nastavením adresáře a domény, některé prohlížeče s tím mají problémy, zvláště u subdomén:

setcookie('NÁZEV', 'HODNOTA', 'EXPIRACE', 'ADRESÁŘ', '(SUB)DOMÉNA');

Záleží na tom, jak je ta aplikace udělaná, jestli to je na nějaké subdoméně, v konkrétním adresáři, atd.
Další možnost je zkusit nastavit:

ini_set('session.cookie_domain','(SUB)DOMÉNA');

V obou výše uvedených případech zkusit postupně za (SUB)DOMÉNU nastavit ".example.com" (i s tou tečkou), "example.com", "www.example.com" obdobně se subdomena.example.com a prokombinovat to s předchozím setcookie.
Zkoušel bych to projistotu zvlášť v prázdném novém souboru, aby se omezily další vlivy, co pak vypíše:

ini_set('session.cookie_domain','(SUB)DOMÉNA');
session_start();
echo $_COOKIE['PHPSESSID'];

atd.

Jinak právě nastavená cookie je "dostupná" až na následující stránce.

Když se podíváte na ty ___utmX cookies přes nabídku prohlížeče, tak v jakém tvaru mají u sebe uvedenou doménu? Zkusil bych použít stejnou.

tak jsem navic zkousel (domena zustava zatim utajena, ale pouzil jsem stejnou - realnou, jako ty od googlu, subdomena neni)

setcookie('PHPSESSID', session_id(), time()+3600, '/katalog/', '.domena.cz');
setcookie('pokus', session_id(), time()+3600, '/katalog/', '.domena.cz');
setcookie('pokus', session_id(), time()+3600, '/', '.domena.cz');
setcookie('pokus', 'pokus', time()+3600, '/', '.domena.cz');

i ten ini_set('session.cookie_domain','.domena.cz');, ale zadny z prikazu neposlal jakoukoliv cookie

Prikaz ini_set('session.use_trans_sid', 1); zatim resi castecne muj problem, zitra zkusim zavolat na podporu poskytovatele, kde je chyba.

Jinak diky.

Já mám phpinfo prakticky stejné, akorát místo:
session.use_only_cookies On Off
mám:
session.use_only_cookies Off Off
ale to by nemělo vadit.

Zkusil bych si ještě udělat testovací účet na na něčem jako wz.cz nebo ic.cz a vyzkoušet to tam, když to tam pojede, tak bude asi problém s nastavením servru, ale to už by musela řešit vaše hostingová společnost.

Jinak by mě zajímalo, až se na to příjde, v čem byl problém.

Tak se to konecne podarilo zprovoznit.

Start_session() se musi poustet pred jakymkoliv vystupem do browseru, to je jasne. Problem byl v tom, ze editor na zacatek souboru vlozil "neviditelny" tzv. "UTF BOM" (0xEF 0xBB 0xBF). Videt lze pri prohlizeni souboru v hexakodu nebo nejakem slusnem nonMS editoru.

Užití BOM v UTF-8 je pro účel rozpoznání pořadí ukládání bajtů nadbytečné, nicméně množství aplikací operačního systému Microsoft Windows používá tento znak na začátku souboru pro rozlišení souborů uložených ve formátu UTF-8. V některých systémech (POSIX) není tato signatura používána a může být zdrojem problémů.

Tento BOM sam o sobe nevadi v propade zapnuteho "output_buffering". Data zustanou v bufferu a odesle se cookie. V mem pripade byl vsak buffer vypnut. Navic server bezi na Linuxu. K tomu bylo vypnuto i hlaseni warningu a chyb. Start_session() vratil, ze probehl v poradku - tudiz TRUE. Ve skutecnosti vsak zustalo skryto:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at xxx.php:1) in xxx.php on line 1

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at xxx.php:1) in xxx.php on line 1

Po odstraneni BOMu vse funguje i bez bufferu.

Můj druhý řádek v indexu, hned po <?php je ob_start(); :-).
Že občas dělá problémy BOM vím jen z různých diskusních fór, osobně jsem se s tím nikdy nesetkal. V jakém editoru se to stalo? Nebo to byl soubor po někom jiném? Já jsem dříve používal PSPad, pak jEdit a občas Gedit a nikdy nebyl žádný problém.

Na serveru vsak neni cookie generovana a po kazdem zavolani session_start() se vytvori nova session.

Když si prachsprostě vypíšeš

echo session_id() ;

dostaneš pokaždé jiné id ? - to sis jistě ověřil, že ano.
Vypadá to, že na serveru je vše v pořádku - sice neznám hostitele, ale důležité hodnoty se shodují se servery, které používám bez problémů (včetně mého PC).

Nepřihodí se něco nekalého po cestě - třeba podobného tomuto ? :

http://www.infoqu.com/dev/php-development/php-sess ion-problem-using-firewall-help-please-157047-1/

Netvrdím, že jsem problém rozřešil, ale spíš hádám na problém Tvého počítače či sítě.

dostaneš pokaždé jiné id ? - to sis jistě ověřil, že ano.

Ano, to jsem si overil jako prvni.

Z jinych serveru bez problemu, za routerem nemam zadny FW, 4 vyse uvedene cookies ze serveru prijdou. Zitra zkusim jeste jinou sit, ale nemyslim, ze v tom je problem...

Měl jsem uplně stejný problém. Sessions fungovaly na lokále, kde jsem je původně testoval, ale jakmile jsem skripty dal na firemní server, sessions nefungovaly (vytvořily se při zalogování a na dalším skriptu už neexistovali).

Doporučuji stáhnout nějaký hexa editor viz odkaz: http://www.chmaas.handshake.de/delphi/freeware/xvi 32/xvi32.htm#download

Otevřít vaše skripty, na začátku každého skriptu uvidíte 3 znaky před <?php, jakmile je smažete, sessions budou fungovat.

Dotaz z roku 2010, navíc vyřešený - zamykám. (Kurt)

Zpět do poradny Nahoru