Session probleem in php

Status
Niet open voor verdere reacties.
In opera enkel de opera add blocker.
ik gebruik geen .htaccess en php.ini is niet gewijzigd dus nog standaard settings
Mozilla firefox geeft ook 32 karakters sessie id en slimjet ook
 
Maar het klopt dus dat die in Opera onderuit gaat. Daar heeft je SessionID meer tekens dan PHP aankan.
Dus probeer eens een schoon profiel daarin.
 
Probleem in opera is opgelost, maar letterlijk geen enkele van de 5 browsers slaat de sessie variabelen op.
Getest in opera, brave, slimjet, edge en mozilla firefox
 
Probeer eens op een ander apparaat? Telefoon, tablet, laptop?
Dan weet je of je computer niet de oorzaak is, met bepaalde beveiligingssoftware, om maar wat te noemen.
 
Geprobeerd op een andere pc en mijn gsm, en zelfde probleem.
 
Kan je het ook reproduceren op een test-server (XAMPP ofzo)?

Dan maakt dat al veel duidelijker.

Anders moet je het bij je hosting neerleggen.
 
Ik heb hetzelfde met xampp
een 32 karakter lange sessie id en geen opslag van de sessie variabelen in eender welke browser
Hier kan je een test pagina vinden
 
Laatst bewerkt:
Hier wordt ook niks opgeslagen.
En hoe ziet je script eruit van begin tot eind?

Hier heet je jouw sessie geen PHPSESSID maar PRIVATE?
Dus ik vermoed dat je meer doet dan wat simpele dingen?
 
Dat is omdat ik een eerder script heb aangepast en session_name "private" vergat te verwijderen

De weergegeven pagina:
PHP:
<?php
session_name("Private");
session_start();
$private_id = session_id();
if (isset($_SESSION["test"])) $ntest = $_SESSION["test"];
if (isset($_SESSION["test_one"])) $stest_one = $_SESSION["test_one"];
if (isset($_SESSION["test_two"])) $stest_two = $_SESSION["test_two"];
if (isset($_SESSION["test_three"])) $stest_three = $_SESSION["test_three"];

$ntest = 0;
$stest_one = "Top";
$stest_two = "Upper";
$stest_three = "Lower";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Session test</title>
<style>
div {
	text-align: center;
}
span {
	cursor: pointer;
	color: #0000bb;
}
span:hover {
	text-decoration: underline;
	font-weight: bold;
}
</style>
<script>
var nnum = 0
function fsessiontest(ospan) {
  nnum++;
  var stime = ospan.id.substr(0, ospan.id.length-4)
  if (window.XMLHttpRequest) {
    xhttp = new XMLHttpRequest()
  } else {
    xhttp = new ActiveXObject("Microsoft.XMLHTTP")
  }
  xhttp.open("POST", "sessiontest.php", false)
  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
  xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
      ospan.innerHTML = xhttp.responseText
    }
  }
  xhttp.send("nnum=" + nnum + "&stime=" + stime)
}

function fdestroysession() {
  if (window.XMLHttpRequest) {
	xhttp = new XMLHttpRequest()
  } else {
    xhttp = new ActiveXObject("Microsoft.XMLHTTP")
  }
  xhttp.open("POST", "destroysessiontest.php", false)
  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
  xhttp.onreadystatechange = function() {
	if (xhttp.readyState == 4 && xhttp.status == 200) {
      document.getElementById("destroysessionspan").innerHTML = xhttp.responseText
      setTimeout("window.location='./';", 2000)
	}
  }
  xhttp.send("")
}
</script>
</head>
<body>
<div id="firstdiv"> <span id="firstspan" onclick="javascript:fsessiontest(document.getElementById('firstspan'));"> <?php echo $stest_one; ?> </span> <br />&nbsp;</div>
<div id="seconddiv"> <span id="secondspan" onclick="javascript:fsessiontest(document.getElementById('secondspan'));"> <?php echo $stest_two; ?> </span> <br />&nbsp;</div>
<div id="thirddiv"> <span id="thirdspan" onclick="javascript:fsessiontest(document.getElementById('thirdspan'));"> <?php echo $stest_three; ?> </span> <br />&nbsp;</div>
<div> <span id="destroysessionspan" onclick="javascript:fdestroysession();"> Bottom (end session) </span> </div>
</body>
</html>
<?php
$_SESSION["test"] = $ntest;
$_SESSION["test_one"] = $stest_one;
$_SESSION["test_two"] = $stest_two;
$_SESSION["test_three"] = $stest_three;
session_write_close();
?>

De pagina die aangeroepen wordt om de wijziging op te slaan:
PHP:
<?php
session_name("Private");
session_start();
$private_id = session_id();
if (isset($_SESSION["test"])) $ntest = $_SESSION["test"];
if (isset($_SESSION["test_one"])) $stest_one = $_SESSION["test_one"];
if (isset($_SESSION["test_two"])) $stest_two = $_SESSION["test_two"];
if (isset($_SESSION["test_three"])) $stest_three = $_SESSION["test_three"];

$ntest = $_POST["nnum"];

if ($_POST["stime"] == "first") {
	$stest_one = "change " . $ntest;
	echo $stest_one;
} else if ($_POST["stime"] == "second") {
	$stest_two = "change " . $ntest;
	echo $stest_two;
} else if ($_POST["stime"] == "third") {
	$stest_three = "change " . $ntest;
	echo $stest_three;
}

echo "<br />" . $ntest;

echo ($ntest == 1) ? "st" : (($ntest == 2) ? "nd" : (($ntest == 3) ? "rd" : "th"));
?>
&nbsp;change
<br />
<?php
$_SESSION["test"] = $ntest;
$_SESSION["test_one"] = $stest_one;
$_SESSION["test_two"] = $stest_two;
$_SESSION["test_three"] = $stest_three;
session_write_close();
?>

De pagina die de sessie beëindigt:
PHP:
<?php
session_name("Private");
session_start();
$private_id = session_id();
if (isset($_SESSION["test"])) $ntest = $_SESSION["test"];
if (isset($_SESSION["test_one"])) $stest_one = $_SESSION["test_one"];
if (isset($_SESSION["test_two"])) $stest_two = $_SESSION["test_two"];
if (isset($_SESSION["test_three"])) $stest_three = $_SESSION["test_three"];

echo "Session ended.";

session_destroy();
?>

De gedeeltes die zich in elke pagina herhalen heb ik in aparte pagina's gezet en met include in elke van bovenstaande pagina's gezet
 
En een simpele testcase, zoiets als ik plaatste?
Dat werkt wel?

Hoe compacter, hoe beter.
 
Die werkt wel bij het weergeven van de variabele omdat die pas is toegewezen, maar slaat deze ook niet op: Test case
 
Laatst bewerkt:
En als je hem niet toewijst en opvraagt? Dat moet dan toch werken?
 
Dat is hem nu net het probleem, doordat de variabele niet opgeslagen wordt, bestaat die niet in de sessie en kan je deze niet opvragen.
 
Hier een testcase die hier prima werkt!

Als je session_write_close(); en session_destroy(); gebruikt, vernietig je jouw sessies.
Dus niet verwonderlijk dat het niet werkt.
 

Bijlagen

  • sessies.zip
    818 bytes · Weergaven: 10
Laatst bewerkt:
Na het verwijderen van alle site gegevens, worden nog steeds geen sessie variabelen opgeslagen, en krijg ik dit:
Bekijk bijlage 371613


mod. Het "afbeelding" knopje werkt op deze manier (klik) :)
 
Laatst bewerkt door een moderator:
Bijlage werkt niet omdat dit forum buggy is.
Gaat het over mijn testcase?
Upload anders je foto op www.imgbb.com
 
Laatst bewerkt:
Het is niet meer relevant omdat het wel opnieuw werkte nadat ik de pagina vernieuwd heb.
Blijkbaar heeft het verwijderen van alle site data en het verversen van de pagina's het probleem opgelost.
Ik begrijp alleen niet waarom je de sessie variabelen niet in de application van de browser kunt zien zoals je de localstorage en cookies kunt zien
 
Omdat sessies serverside zijn, en je browser een simpele client is.
Anders moet je cookies of localstorage gebruiken.
 
Dat was ook mijn idee, maar liever niet voor delen met login en zo
Dikke dankjewel om mij zo goed te helpen :thumb:
 
Graag gedaan. Misschien is het handig om je even goed door te lezen over hoe PHP Sessions werken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan