Ahoj lidi mám problém na svém serveru uvedu to na příkladu
page1.php
-------------
session_start();
$_SESSION['one'] = 'one';
header("Location: $server/page2.php");
exit();
-------------
page2.php
-------------
session_start();
if ($_SESSION['one'] == 'one') { die("It worked."); }
else { die("It did not work."); }
-------------
(page2.php outputs "It did not work.")
mám podezření, že po přesměrování se vytvoří nové PHPSESSID a aby toho nebylo málo děje se to jen u některých uživatelů (cca tak 2 z 5)
svůj server mohu editovat jak potřebuji, ale nikde sem nevygooglil nic co by mi pomohlo
ještě přikládám nastevní session v php.ini
Session Support enabled
Registered save handlers files user
Registered serializer handlers php php_binary wddx
session.auto_start Off
session.bug_compat_42 Off
session.bug_compat_warn Off
session.cache_expire 180
session.cache_limiter nocache
session.cookie_domain no value
session.cookie_httponly Off
session.cookie_lifetime 0
session.cookie_path /
session.cookie_secure Off
session.entropy_file no value
session.entropy_length 0
session.gc_divisor 1000
session.gc_maxlifetime 1440
session.gc_probability 1
session.hash_bits_per_character 5
session.hash_function 0
session.name PHPSESSID
session.referer_check no value
session.save_handler files
session.save_path /home/domenacz/tmp
session.serialize_handler php
session.use_cookies On
session.use_only_cookies On
session.use_trans_sid 0
děkuji všem za rady...
Málo informací -- děje se to pořád u stejných uživatelů? Nebo průběžně u všech, jenom ne vždycky?
Zkus si zobrazit i vlastní session id pomocí session_id(); ať máš jistotu, jestli se skutečně vygenerovalo nové id.
page1.php
-------------
session_start();
$_SESSION['one'] = 'one';
header("Location: $server/page2.php?x=".session_id());
exit();
-------------
page2.php
-------------
session_start();
var_dump($_GET);
echo "Current sessionId: ".session_id()."! ";
if ($_SESSION['one'] == 'one') { die("It worked."); }
else { die("It did not work."); }
-------------
V rychlosti 2 nápady, kde může být problém:
a) Něco/někdo promazává session na serveru (ukládáš je do nestandardního umístění /home/domenacz/tmp).. to je ale docela nepravděpodobné.
b) Dřív některé firewally (koncový počítač) odmítaly ukládat cookie s neomezenou platností.. ale tahle "paranoia" by dneska už taky měla být passé.
Jenom drobnost na závěr, session.cookie_httponly by mělo být téměř vždycky povolené.. vypínat jenom pokud víš, co děláš :)
Ještě se podívej do prohlížeče, zda tam existuje cookies s názvem PHPSESSID.
Pokud tam není a id také není v URL, tak session nefunguje správně.
Buď server nevytvořil PHPSESSID nebo klient toto blokuje.
děje se to cca u 2 uživatelů z 5 jde o to, že si uložím že platba z gopay je true pak přesměruji a tam mimo jiné kontroluji tu session jestli je true a ono ji to vubec nevidi, ano skutečně dojde po přesměrování k novému založení relace, tedy změně phpsessid, ale nevím proč, zkoušel jsem nějaké funkce a různé jejich kombinace, podle toho co jsem vygooglil (session_regenerate_id(true); session_write_close();), ale bez výsledku...
Pak bych hledal chybu někde jinde, protože kdyby byla chyba v kódu, tak by to session nevidělo ani těch zbývajících 3 uživatelů.
V prvé řadě se ujistit, že ti dva měli zapnuté/povolené cookies. Pokud jo, pak se poptat, co za prohlížeč a operační systém mají.
Ale popravdě kolem tohoto je to vždy na prd. Za mě to stalo tak dvakrát, kdy jsem řešil problematické session (někde fungovalo někde ne). V obou případech však šlo jen o nedobrovolné odhlašování nebo k přihlášení ani nedošlo. Už ani nevím jak se to řešilo.