Portál AbcLinuxu, 27. října 2025 14:21
Dělám jeden projekt v PHPku a jako úložtě pro session používám DB přes session_set_save_handler. Všechno funguje v pořádku do doby, než použiju redirect z formuláře, kdy session proměnné zmizí. Před redirectem pro jistotu volám i session_write_close, ale ani to nepomáhá.
Pomocí google jsem hledal, ale k žádnému použitelnému výsledku jsem se nedopracoval :(
V příloze je soubor se třídou pro práci se sessions.
function redirect($url) {
session_write_close();
//$url='https://'.$_SERVER["SERVER_NAME"].eregi_replace('index.php(.*)','',$_SERVER["REQUEST_URI"]).$url;
//echo "<script>document.location.href='$url';</script>\n";
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://'.$_SERVER["SERVER_NAME"].eregi_replace('index.php(.*)','',$_SERVER["REQUEST_URI"]).$url);
exit;
}
A protokol https používám i před přesměrováním.Zajímavé je že toto na začátku index.php funguje:
if(!isset($_SERVER['HTTPS'])) {
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]);
exit;
}
a když zkusím zadat http://localhost/aplikace/index.php?bla=bla tak se provede přesmerování na https://localhost/aplikace/index.php?bla=bla žádné session data se neztratí.
function redirect($url) {
session_write_close();
for($i=0;$i<10000;$i++) {
for($j=0;$j<1000;$j++) {
}
}
$url='https://'.$_SERVER["SERVER_NAME"].eregi_replace('index.php(.*)','',$_SERVER["REQUEST_URI"]).$url;
if(headers_sent()) {
echo "<script>document.location.href='$url';</script>\n";
} else {
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$url);
}
exit;
}
A když tu vnější smyčku snížím jenom na 1000 provádění, tak sessions opět nefungujou.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.