PHP - Problem med sessioner
Tjenare,
har kört in i en vägg med ett problem jag aldrig haft förr. Felet finns inte i övriga servrar jag kört apache med php på och det är första gången jag suttit i 7.0 i en Linux-miljö (inte programmerat på väldigt länge).
Eftersom jag sitter och leker runt lite i en mongo-databas och kör diverse queries till den så vill jag inte att allt ska ske på samma sida, så låt oss därför kalla sidorna för... GET och POST för att hålla det så lätt som möjligt.
I min index-php så skickar jag därför mina forms till "GET" eller "POST" beroende på vilken form som används från sidan.
Problemet är att jag vill inte använda URL-parametrar (?id=<#>) utan jag vill lagra det i sessionen ($_SESSION).
När jag kör diverse tester och försöker lagra uppgifter på andra sidor så funkar det på den sidan att lagra det (även efter att sidan laddas om och koden för att göra detta är borta). Men så fort jag gör en redirect så uppstår felet.
Jag har testat något så basic som att lagra en text med ordet "test" i en sida som är helt tom (innehåller en session_start om ingen session finns) och sedan köra en redirect till index.php, men den är då borta igen.
Jag får ett sessions-id, sessionen är startad i alla instanser som behöver det, men variabeln töms mellan sidorna.
Vad kan vara felet?
PHP.ini:
https://www.dropbox.com/s/27v9ajg86033yxo/php.ini?dl=0
[Session]
session.save_handler = files
;session.save_path = "/var/lib/php/sessions"
session.use_strict_mode = 0
session.use_cookies = 1
;session.cookie_secure =
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 0
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
Exempelkod
index.php
echo "<div id='debug'>";
if(isset($_COOKIE["PHPSESSID"])) echo "ID => " . session_id() . "<br>Data => ";
if(isset($_SESSION['selected'])) echo json_encode($_SESSION['selected']);
else echo "no data";
echo "</div>" ;
Output:
ID => u811ll227desdo083jmurds6p6
Data => no data
GET.php
$_SESSION["selected"] = $db->findOne($_POST['search_name']);
header("location: http://{$_SERVER[HTTP_HOST]}");
exit();
Output:
$_SESSION["selected"] är tom efter sidan har redirect.
Om man inte kör redirect:
object(MongoDB\Model\BSONDocument)#17 (1) { ["storage":"ArrayObject":private]=> array(7) { ["_id"]=> object(MongoDB\BSON\ObjectID)#14 (1) { ["oid"]=> string(24) "59a6dfcbc07d284f5d67ea91" }
Utan att gå in mer i detalj på vad objektet faktiskt är.
FYI:
Ny server uppsatt i VM, finns inget viktigt på den öht. Därför kan php.ini också se lite tunn ut.
Finns inga felmeddelanden alls, all loggning är på.
Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40