Verdwijnen sessionvalues na redirect
Die wordt aangesproken bij het inloggen.
En de sessions zijn in mijn eigen website ondergebracht.
Elke pagina verwijst naar een processorpage.
Deze start de session.
Dit lukt 1 keer.
Wanneer er een redirect gebruikt wordt (bedankpagina en weer terug naar de eerdere pagina)
dan blijft de session wel bestaan, maar ben ik de values kwijt van de session.
Heb zo ongeveer alle mogelijkheden gelezen die dit kunnen veroorzaken gelezen.
En uitgeprobeerd. Maar er verandert niks.
Nu ook de provider maar gevraagd, omdat ik gedeelde server gebruik.
En probleem ook in de php.ini kan zitten.
Iemand nog idee?
VERWIJZING NAAR CHECK_STATUS ALLE PAGINA’S
CLASS SESSION (Bij processes)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
class Session{
public function __construct() {
ini_set("session.gc_maxlifetime", Session_Lifetime);
ini_set('session.cookie_lifetime', Session_Lifetime);
ini_set('session.gc_probability', 1);
ini_set('session.gc_diviser', 100);
session_save_path(realpath($_SERVER['DOCUMENT_ROOT']) ."/../../session/");
session_start();
}
public function set($k, $v, $m, $n){
$_SESSION[$k] = $v;
$_SESSION[$m] = $n;
}
}
public function __construct() {
ini_set("session.gc_maxlifetime", Session_Lifetime);
ini_set('session.cookie_lifetime', Session_Lifetime);
ini_set('session.gc_probability', 1);
ini_set('session.gc_diviser', 100);
session_save_path(realpath($_SERVER['DOCUMENT_ROOT']) ."/../../session/");
session_start();
}
public function set($k, $v, $m, $n){
$_SESSION[$k] = $v;
$_SESSION[$m] = $n;
}
}
VERWIJZING VAN ELKE PAGINA (In processes)
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
function check_status($page) {
$session = new Session(); //PROBLEEM
session_start(); // PROBLEEM
echo 'SESSION --- '.$_SESSION['username'];
if(!isset($_SESSION['username']))
{
header("Location: https://".$_SERVER['HTTP_HOST'].Script_Path."index.php?page=".$page);
}
}
$session = new Session(); //PROBLEEM
session_start(); // PROBLEEM
echo 'SESSION --- '.$_SESSION['username'];
if(!isset($_SESSION['username']))
{
header("Location: https://".$_SERVER['HTTP_HOST'].Script_Path."index.php?page=".$page);
}
}
BEDANKPAGINA
Code (php)
1
header( "refresh: 5; url = https://www.pctraverse.nl/Inlog/inlog2/include/radiobuttonsA.php");
ALGEMENE INFO OVER PROBLEEM (GOOGLE)
https://www.google.nl/search?rlz=1C1CAFA_enNL663NL689&q=php+session+lost+between+pages&sa=X&ved=0ahUKEwjYpMzW-qPaAhXHGewKHTF9AKsQ1QIIkQEoAQ&biw=1366&bih=662
$session mag je maar 1 keer aanmaken omdat je maar 1 keer een sessie kan starten. Dat zou ik dan dus niet binnen een functie doen, maar 1 keer, en dan $session meegeven aan je classes en functies.
Overigens zou ik sessies zo niet inpakken.
Dit:
Code (php)
1
2
3
4
5
2
3
4
5
ini_set("session.gc_maxlifetime", Session_Lifetime);
ini_set('session.cookie_lifetime', Session_Lifetime);
ini_set('session.gc_probability', 1);
ini_set('session.gc_diviser', 100);
session_save_path(realpath($_SERVER['DOCUMENT_ROOT']) ."/../../session/");
ini_set('session.cookie_lifetime', Session_Lifetime);
ini_set('session.gc_probability', 1);
ini_set('session.gc_diviser', 100);
session_save_path(realpath($_SERVER['DOCUMENT_ROOT']) ."/../../session/");
hoort in (een) configuratie(bestand) thuis.
Dit:
Dient aan het begin van een pagina aangeroepen te worden indien je een sessie wilt starten/voortzetten.
Dit:
Beperkt heel erg de mogelijkheden van wat je met een sessie kunt doen. In wezen is $_SESSION gewoon een array, en hiermee -als je uitsluitend je Session class gebruikt- reduceer je dit tot een eendimensionaal array.
Overigens moet na een header-redirect altijd een exit. Dit wordt ook aangehaald als een van de mogelijke oplossingen in een StackOverflow-post die jouw eerdere zoekopdracht vond.
NB: loop die hele checklist af, mogelijk zit daar iets tussen.
Gewijzigd op 11/04/2018 16:33:10 door Thomas van den Heuvel
Daarna hoor je normaal toch op elke pagina een session_start() te geven?
In dit geval gebeurt dat centraal vanaf elke pagina...
Kan zijn dat ik wat meer heb neergezet ivm uitproberen..
Is dat anders dan?
De header sluit ik ook normaal af met exit.
Maar hier staat nog wat tekst onder.
En die zie je niet, wanneer je direct de exit doet.
Gewijzigd op 11/04/2018 16:34:13 door Hans De Ridder
Het is beter om een absoluut pad te definiëren, dan zie je direct waar sessie-bestanden zouden moeten worden weggeschreven. Pas dit dus aan.
Daarbij: bevat deze directory bestanden en kun je wel schrijven naar deze directory?
Die geeft wel de juiste value aan de eerste keer.
Bij herhalen is er geen value.
Maar ik kan ook niet terug naar inloggen.
Ik blijf wel ingelogd omdatde sessie nog wel bestaat.
De sessions worden wel aangemaakt, en zijn ook zichtbaar in de nieuwe dir.
Gewijzigd op 11/04/2018 16:39:33 door Hans De Ridder
Normaal kom je ook niet aan instellingen als gc_divisor (let op: typefout) en gc_probability, tenzij je aan het finetunen bent. En deze instellen op de default waarde is niet zo zinnig. Wat is trouwens Session_Lifetime? Is dit een constante die je ergens anders hebt gedefinieerd?
Mogelijk loont het ook de moeite om errorlogs te raadplegen en/of wat debugging aan te zetten, zet hiertoe het volgende bovenaan in je code:
En zoals ik al eerder aangaf: bekijk dingen eens in afzondering, zonder inmenging van andere (mogelijk conflicterende) functionaliteit.
Dit heeft blijkbaar te maken met de sessiondir zoals de provider die in heeft gesteld.
En er anders problemen kunnen optreden met de door mij gemaakte dir voor de sessions.
Ik werk op gedeelde server.
Op dit moment is het gewoon zaak dat je dingen gaat strippen net zolang totdat de problemen verdwijnen of dat je met een (werkende) basis begint en je dit net zolang uitbreidt totdat het niet meer werkt. Dan heb je je probleem te pakken.
Volg de bovenstaande stappen op en zorg er in ieder geval voor dat je met een soort van plan dingen gaat testen.
Sessies zijn in het gebruik absoluut niet moeilijk, dus ik vermoed dat hier dus gewoon iets geks (en redelijk basaals) aan de hand is.
Gewijzigd op 11/04/2018 17:55:09 door Thomas van den Heuvel
Maar inderdaad wel slim om dit deel apart op te nemen in een nieuw script.
En te kijken waar het verkeerd gaat.
Wacht ook nog op antwoord van provider.
Als ik wat meer weet, reageer ik weer.
Bedankt tot zover voor de adviezen.
Toevoeging op 12/04/2018 11:24:59:
Ik denk dat ik de fout gevonden heb.
Heb het hele inlogscript nog eens doorgelopen.
Toen kwam ik erachter dat net voor de verwijzing naar de bedankpagina
ik nog een keer de sessie aanmaak.
Weggehaald, en probleem komt niet meer voor nu...
Bedankt voor de reacties.