Probleem met Session settings
Ik loop tegen het volgende probleem aan. Ik heb een website draaien op mijn Synology NAS. Werkt allemaal prima. Deze website wordt gesynchroniseerd met de site op mijn MacBook. Ze zijn dus identiek. Ook de database lokaal en op de NAS zijn identiek.
Het geval wil nu dat als ik inlog op de site op mijn NAS de procedure goed verloopt maar lokaal wil dir niet lukken. Als ik in het inlogscript op de plaats net voordat ik redirect naar de homepage controleer ben ik ook lokaal goed ingelogd. Zodra ik op de homepage aankom is de sessievariabele $_SESSION['user'] weg.
Ik hoop dat ik het duidelijk heb beschreven. Iemand een idee waar ik de oorzaak zou moeten zoeken. Overigens heeft het in het verleden wel goed gewerkt. Kan het een instelling in php.ini zijn?
Bij voorbaat dank
Peter
Staan foutmeldingen aan?
is hetdezelfde php versie?
synology is de nieuwste versie 8.0.17
local 8.1.8
Toevoeging op 16/07/2022 10:34:51:
Een beetje code kan mischien helpen
Als ik gelijk heb, kan je dit gedrag terugzien in de browser, al dan niet met een plug-in (bijvoorbeeld "Cookie Quick Manager" in Firefox)
Stukje code
index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php include("../include/session.php");
ini_set("display_errors", 1);
$_SESSION['cart1'][]="<?PHP echo $gebruiker;?>";
$meld="Homepage";
//logboek($title,$meld);
Login.php
//-----------------------------------------------------------------------------------
// inloggegevens opslaan in een cookie
//-----------------------------------------------------------------------------------
if($bewaar==1){
$verloopt_op = time() + 60*60*24*30; // maand
$_SESSION["inlogtime"]=time();
$_SESSION["verloopt"]=$verloopt_op;
setcookie("email", "$email", $verloopt_op,"/","");
$_SESSION['cart'][]="Gegevens bewaard!".$cc_pass;
$_SESSION['cart'][]="Gegevens bewaard!".$email;
} // einde bewaar
// ingelog en door naar de homepagek
phpinfo(); // tot hier gaat het goed vaiabelen bestaan
redirect_to('../php/index.php');
exit();
}else{
$_SESSION['cart'][]="Inloggen niet gelukt";
$gevonden="nee";
// inloggen niet gelukt
$_SESSION['cart'][]="Onjuiste invoer.";
if(isset($_SESSION['wacht'])){
// volgende foute invoer wachttijd verdubbelen
//$_SESSION['wacht']=($_SESSION['wacht']*2);
}else{
// 1e keer fout 5 seconden wachten
$_SESSION['wacht']=1;
}
$_SESSION['cart'][]="Bij de volgende poging is de wachttijd " .$_SESSION['wacht']. " seconden!";
$_SESSION['cart'][]="LET OP! Bij invoer is verschil tussen HOOFDLETTERS en kleine letters! ";
redirect_to("../app_register/login.php");
exit();
}
ini_set("display_errors", 1);
$_SESSION['cart1'][]="<?PHP echo $gebruiker;?>";
$meld="Homepage";
//logboek($title,$meld);
Login.php
//-----------------------------------------------------------------------------------
// inloggegevens opslaan in een cookie
//-----------------------------------------------------------------------------------
if($bewaar==1){
$verloopt_op = time() + 60*60*24*30; // maand
$_SESSION["inlogtime"]=time();
$_SESSION["verloopt"]=$verloopt_op;
setcookie("email", "$email", $verloopt_op,"/","");
$_SESSION['cart'][]="Gegevens bewaard!".$cc_pass;
$_SESSION['cart'][]="Gegevens bewaard!".$email;
} // einde bewaar
// ingelog en door naar de homepagek
phpinfo(); // tot hier gaat het goed vaiabelen bestaan
redirect_to('../php/index.php');
exit();
}else{
$_SESSION['cart'][]="Inloggen niet gelukt";
$gevonden="nee";
// inloggen niet gelukt
$_SESSION['cart'][]="Onjuiste invoer.";
if(isset($_SESSION['wacht'])){
// volgende foute invoer wachttijd verdubbelen
//$_SESSION['wacht']=($_SESSION['wacht']*2);
}else{
// 1e keer fout 5 seconden wachten
$_SESSION['wacht']=1;
}
$_SESSION['cart'][]="Bij de volgende poging is de wachttijd " .$_SESSION['wacht']. " seconden!";
$_SESSION['cart'][]="LET OP! Bij invoer is verschil tussen HOOFDLETTERS en kleine letters! ";
redirect_to("../app_register/login.php");
exit();
}
Je moet wel eerst session_start() aanroepen, doe je dat ook?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
if (!isset($_SESSION)) {session_start();}
ini_set("display_errors", 1);
//error_reporting(E_ALL & ~E_NOTICE);
error_reporting(E_ALL);
$paginaName=$_SERVER['PHP_SELF'];
//**************************************************************
// variabelen instellen
//**************************************************************
date_default_timezone_set('Europe/Amsterdam');
setlocale(LC_ALL,'nl_NL');
$updated= "Bijgewerkt op: " . date ("F d Y H:i:s.", getlastmod());
$root=$_SERVER['DOCUMENT_ROOT'];
$root1="../";
$root2="../../";
$path="../";
connection naar de database
[size=xsmall][i]Toevoeging op 16/07/2022 15:50:53:[/i][/size]
En dit werk dus allemaal goed op de server.
if (!isset($_SESSION)) {session_start();}
ini_set("display_errors", 1);
//error_reporting(E_ALL & ~E_NOTICE);
error_reporting(E_ALL);
$paginaName=$_SERVER['PHP_SELF'];
//**************************************************************
// variabelen instellen
//**************************************************************
date_default_timezone_set('Europe/Amsterdam');
setlocale(LC_ALL,'nl_NL');
$updated= "Bijgewerkt op: " . date ("F d Y H:i:s.", getlastmod());
$root=$_SERVER['DOCUMENT_ROOT'];
$root1="../";
$root2="../../";
$path="../";
connection naar de database
[size=xsmall][i]Toevoeging op 16/07/2022 15:50:53:[/i][/size]
En dit werk dus allemaal goed op de server.
Kijk ook eens wat print_r over je $_SESSION zegt?
Notice: Undefined index: auth in /Volumes/Werkdisk/Sites/home/php/index.php on line 98
Dit zou dus True moeten geven.
Wat bedoel je met: Fix je codeblok eens? ^^
De rest heb ik zelf bij gezet.
.Session_id:snn2dmsv8jbt97h0f3ii6ubsrc
Voor zover ik het nu kan bekijken wordt er na het inloggen een nieuwe sessie gestart.
Toevoeging op 16/07/2022 18:01:59:
Omdat het op de server goed werkt en de bestanden identiek zijn (Synology Drive) zou je toch aan kunnen nemen dat er met het script niets mis is.
>>
Nu controleer je slechts op een bepaalde key. Check gewoon de complete session variabele eens om te zien of/wat daar (iets) in zit.
Gewijzigd op 16/07/2022 18:05:31 door Ozzie PHP
$_SESSION['cart1'][]="";
Jan R op 16/07/2022 18:27:14:
Ik vind regel 3 maar iets raar hoor
$_SESSION['cart1'][]="";
$_SESSION['cart1'][]="";
Dat is het ook. Klopt niet.
array(28) { ["host"]=> string(9) "localhost" ["user"]=> string(15) "petervankroonen" ["dbf"]=> string(15) "petervankroonen" ["pw"]=> string(11) “XXXXX!” ["cart"]=> array(3) { [0]=> string(12) "Login scherm" [1]=> string(19) "Succescvol ingelogd" [2]=> string(6) "Welkom" } ["cart1"]=> array(0) { } ["apparaat"]=> string(7) "desktop" ["LogonCounter"]=> int(0) ["filename"]=> string(51) "/Volumes/Werkdisk/Sites/home/app_register/login.php" ["bron"]=> string(16) "../php/index.php" ["aantal_records"]=> int(1) ["auth"]=> bool(true) ["timeout"]=> int(1660581666) ["gebruiker"]=> string(0) "" ["password"]=> string(5) “XXXXXX” ["klant_login"]=> string(0) "" ["klant_wachtwoord"]=> string(5) “XXXXXXX” ["klant_id"]=> string(10) "1657263846" ["niveau"]=> string(1) "9" ["niveau_id"]=> string(1) "9" ["klant_niveau"]=> string(1) "9" ["voornaam"]=> string(5) "Peter" ["achternaam"]=> string(15) "van kroonenburg" ["initialen"]=> NULL ["email"]=> string(27) "[email protected]" ["groep_id"]=> string(1) "1" ["groepklant"]=> string(1) "A" ["groepcode"]=> string(1) "A" }
Sessie: 5q8s4q0dvdlnjs2lt94i0b1sf7
Toevoeging op 16/07/2022 18:44:58:
Dus keuring ingelogd maar gegevens weg zodra ik aankom bij index.php
Ik snap alleen niet waarom je er inloggegevens in plaatst?
["auth"]=> bool(true)
Ik denk dat alle opties bekeken zijn. Bedankt voor het meedenken. Ik ben nu 2 dagen bezig geweest helaas zonder resultaat. Lijkt me beter om er mee te stoppen en een ander inlogscript te gaan schrijven.
En werkt het wel met een simpel sessie script van een paar regels?
Dat ga ik morgen proberen!
Zo ja: heb je momenteel je sleutels in je hand?
Nee?
Waarschijnlijk niet, want die had je alleen nodig toen je door de voordeur ging.
Waarom vraag ik dit?
Ik zie in je session-dump:
["gebruiker"]=> string(0) "" ["password"]=> string(5) “XXXXXX” ["klant_login"]=> string(0) "" ["klant_wachtwoord"]=> string(5) “XXXXXXX” [
Dat je opslaat wie ingelogd is, is verklaarbaar.
Maar dat je (plaintext) het gebruikte wachtwoord in de session set niet. De lengte 5 suggereert ook nog eens dat je dat dan ongehasht doet.
Het wachtwoord heb je net als een sleuten nodig bij het binnenkomen. Daarna is kennelijk goedgekeurd dat je er erin mocht en dus is het voldoende om te weten we je bent. (naamkaartje om je nek zoals bij veel bedrijven)
Die session data wordt ergens bewaard op de server.
In een /tmp map of een speciale session-map. Of mogelijk in een database.
Ik denk dat die lokatie te vinden is via phpinfo().
Probleem is soms, dat dit session-bestandje plaintext op de server komt te staan en mogelijk door een derde gelezen kan worden. Daar wil je niet je password in hebben staan dus.
Over die locatie:
Wordt dat bestandje wel aangemaakt? Heeft Apache / PHP daar wel schrijfrechten?
Toevoeging op 19/07/2022 10:18:09:
Sessions worden opgeslagen
php
sess_1t6pe6hh0f9egro7okrptuch72
sess_1o3o3u8r086mld2nem5as0kgis
sess_1eqkl7kljuhb2uak5uuscls9ne
sess_0jch5tl40octncmo9i8a2v4u9p
Session Support enabled
Registered save handlers files user
Registered serializer handlers php_serialize php php_binary
Directive Local Value Master Value
session.auto_start Off Off
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_samesite no value no value
session.cookie_secure 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.lazy_write On On
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /Applications/MAMP/tmp/php /Applications/MAMP/tmp/php
session.serialize_handler php php
session.sid_bits_per_character 5 5
session.sid_length 26 26
session.upload_progress.cleanup On On
session.upload_progress.enabled On On
session.upload_progress.freq 1% 1%
session.upload_progress.min_freq 1 1
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix upload_progress_ upload_progress_
session.use_cookies 1 1
session.use_only_cookies 1 1
session.use_strict_mode 0 0
session.use_trans_sid 0 0
Toevoeging op 19/07/2022 10:22:05:
Ik zie ook dat telkens zodra ik een pagina vernieuw een ander session_id krijg.