Verdwijnen sessionvalues na redirect

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Hans De Ridder

Hans De Ridder

11/04/2018 15:01:19
Quote Anchor link
Ik gebruik een class voor de sessions.
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$Login_Process->check_status($_SERVER['SCRIPT_NAME']);

CLASS SESSION (Bij processes)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}
 }

VERWIJZING VAN ELKE PAGINA (In processes)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
        }
    }

BEDANKPAGINA
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
PHP hulp

PHP hulp

29/11/2024 17:33:33
 
Ben van Velzen

Ben van Velzen

11/04/2018 15:47:22
Quote Anchor link
$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.
 
Thomas van den Heuvel

Thomas van den Heuvel

11/04/2018 16:30:57
Quote Anchor link
Waaruit blijkt dat de sessie niet werkt?

Overigens zou ik sessies zo niet inpakken.

Dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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/");

hoort in (een) configuratie(bestand) thuis.

Dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
session_start();

Dient aan het begin van een pagina aangeroepen te worden indien je een sessie wilt starten/voortzetten.

Dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
public function set($k, $v, $m, $n){
    $_SESSION[$k] = $v;
    $_SESSION[$m] = $n;
}

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
 
Hans De Ridder

Hans De Ridder

11/04/2018 16:32:16
Quote Anchor link
In principe wordt de session aangemaakt bij het inloggen.
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
 
Thomas van den Heuvel

Thomas van den Heuvel

11/04/2018 16:35:39
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
session_save_path(realpath($_SERVER['DOCUMENT_ROOT']) ."/../../session/");

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?
 
Hans De Ridder

Hans De Ridder

11/04/2018 16:38:00
Quote Anchor link
Ik heb een echo ingebouwd..
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
 
Thomas van den Heuvel

Thomas van den Heuvel

11/04/2018 16:50:19
Quote Anchor link
Op dit moment is het belangrijk om voor jezelf overzicht te creëren en dingen ook in afzondering te behandelen. Hiertoe zou ik een apart script maken die enkel sessie-gerelateerde dingen test. Zodat je uit kunt sluiten dat het niet aan sessie-functionaliteit ligt, wat mij om te beginnen al behoorlijk sterk lijkt, tenzij dingen echt verkeerde geconfigureerd zijn.

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>

En zoals ik al eerder aangaf: bekijk dingen eens in afzondering, zonder inmenging van andere (mogelijk conflicterende) functionaliteit.
 
Hans De Ridder

Hans De Ridder

11/04/2018 17:00:25
Quote Anchor link
De beschrijvingen in de sessionclass heb ik overgenomen van een forum.
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

11/04/2018 17:54:39
Quote Anchor link
Zolang je het probleem niet hebt opgelost heeft het geen zin om aannames te doen over mogelijke oorzaken.

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
 
Hans De Ridder

Hans De Ridder

11/04/2018 19:04:43
Quote Anchor link
Het inloggen en werken met de session is al vrij geisoleerd.
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.