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?
__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:
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:
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:
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)
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.
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:
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.
Psano v PSPadu, ale zeditovano kvuli drobnosti v notepad.exe. A pak se to jiz vezlo...
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)