Session onthoud gegevens niet

Status
Niet open voor verdere reacties.

JeroenE

Terugkerende gebruiker
Lid geworden
20 mrt 2005
Berichten
1.950
Hallo,

Ik heb een website naar een andere domeinnaam gemigreerd en de code voor het toewijzen van data aan de sessie is hetzelfde gebleven, maar doet het op de nieuwe domeinnaam niet.

De waarden worden wel toegewezen, maar bij het vernieuwen van de pagina, blijkt dat de sessie de waarden niet onthoudt, terwijl dat op de oude domeinnaam wel perfect werkt.

Wat is hier de oorzaak van?
 
Gebruikt de nieuwe domeinnaam SSL/HTTPS misschien?
 
Ja, dat gebruikt de nieuwe en de oude niet.
Hoe los ik dit op?
 
Ik denk dat het daaraan ligt. Worden bezoekers automatisch naar de SSL site gebracht bij het bezoeken van de http site of moet dat handmatig?
 
Hoe kan ik dit nu oplossen? Want het is niet genoeg te weten dat het http of https is he...
 
Als de bezoeker ergens wordt ge-'redirect' van https naar http inhoud (kan iets van ccs of wat dan ook) zal daar session_start() ook weer gestart worden (en dus een nieuw (ander) sessie).
 
dus je zal dienen te werken met
PHP:
class MySessionHandler implements SessionHandlerInterface
{
    // implement interfaces here
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();

 SessionHandler implements SessionHandlerInterface , SessionIdInterface {
/* Methods */
public bool close ( void )
public string create_sid ( void )
public bool destroy ( string $session_id )
public int gc ( int $maxlifetime )
public bool open ( string $save_path , string $session_name )
public string read ( string $session_id )
public bool write ( string $session_id , string $session_data )
}

tja je zal er eerst eens moeten met stoeien voor je het live brengt
 
@Kenikavanbis Wanneer kom je eens met relevante en behulpzame code aan i.p.v. onnodige lappen custom built code uit een van jouw applicaties, die voorzien zijn van onnuttige source voor de vraagstelling van de vrager.

Ik kan me niet indenken dat interfaces verplicht zijn om dit te tackelen.
 
Laatst bewerkt:
Ik krijg de volgende foutmelding:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /customers/e/c/6/domainname.com/httpd.www/session.php:8) in /customers/e/c/6/domainname.com/httpd.www/sessionwrite.php on line 4 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/e/c/6/domainname.com/httpd.www/session.php:8) in /customers/e/c/6/domainname.com/httpd.www/sessionwrite.php on line 4

Hier de code die ik gebruik:

PHP:
<?php
session_name("sessiontest");
session_start();
$private_id = session_id();
$ntest = $_SESSION["test"];
$stest_one = $_SESSION["test_one"];
$stest_two = $_SESSION["test_two"];
$stest_three = $_SESSION["test_three"];
session_write_close();
$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;
		}
	}
	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_name("sessiontest");
session_id($private_id);
session_start();
$_SESSION["test"] = $ntest;
$_SESSION["test_one"] = $stest_one;
$_SESSION["test_two"] = $stest_two;
$_SESSION["test_three"] = $stest_three;
session_write_close();
?>

Een parameter in de sessie wijzigen:

PHP:
<?php
session_name("sessiontest");
session_start();
$private_id = session_id();
$ntest = $_SESSION["test"];
$stest_one = $_SESSION["test_one"];
$stest_two = $_SESSION["test_two"];
$stest_three = $_SESSION["test_three"];
session_write_close();

$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" : "th");
?>
&nbsp;change
<br />
<?php
session_name("sessiontest");
session_id($private_id);
session_start();
$_SESSION["test"] = $ntest;
$_SESSION["test_one"] = $stest_one;
$_SESSION["test_two"] = $stest_two;
$_SESSION["test_three"] = $stest_three;
session_write_close();
?>

En de sessie beëindigen:

PHP:
<?php
session_name("sessiontest");
session_start();
$private_id = session_id();
$ntest = $_SESSION["test"];
$stest_one = $_SESSION["test_one"];
$stest_two = $_SESSION["test_two"];
$stest_three = $_SESSION["test_three"];
session_write_close();

echo "Session ended.";

session_name("sessiontest");
session_id($private_id);
session_start();
session_destroy();
?>

Het probleem zal dus weer in een piepklein hoekje zitten waardoor ik het niet vind...

Link: (http) http://www.liveyourdreams.be/tests/session/
 
Laatst bewerkt:
Ik zie geen foutmelding? Probleem opgelost?
 
De foutmelding blijkt dus geen invloed te hebben op het al dan niet opslaan van gegevens in de session.

Ik krijg op andere delen van de website dezelfde foutmelding, maar kan wel perfect inloggen met gebruik van een session en worden alle gegevens van die session perfect weergegeven en gewijzigd zoals de site het vraagt...
 
Ik heb een tijdelijke oplossing gevonden, en dat is de versie van de php bij de host terug zetten naar php 5.6 of php 7.0
Daar werkt alles perfect.
Met php 7.1 werkt het niet meer, dus daar zou ik toch graag nog een oplossing voor vinden voordat de host de oudere php versie verwijdert en het weer niet meer werkt.
 
Laatst bewerkt:
Je error meldt prima wat er fout is:
output started at /customers/e/c/6/domainname.com/httpd.www/session.php:8
Op lijn 8 van session.php staat blijkbaar output, en dat mag niet.
Dit lijkt mij geen PHP issue, ik denk hoogstens dat de foutafhandeling van de PHP-versies verschilt waardoor je de melding niet ziet.
 
@php4u ik hoop dat u voor u eigen spreekt.En de melding dat ik stukken uit mijn eigen systeem haal zie ik complement en u zal zich ooit de vraag stellen hoe ik die hoge snelheden kan halen.uw opmerkingen? ref:20 juni 2018, 00:12, 7 juni 2018, 23:26, 2 juni 2018, 17:08 , 21 mei 2018, 15:32 (je doet voor als mod)(volgens de regels kan je het nog niet worden)

O ja ik was vergeten referentie te plaatsen.
http://php.net/manual/en/class.sessionhandler.php

Er zijn mensen die verder zitten dan het huis tuin en keuken gebruik.Dus als er problemen ontstaan met session dan kom je al snel op de sessionhandler.
Ik kan aannemen dat het bij sommige boven hun petje gaat daarom staat er ook dat je er eerst mee moet stoeien voor je het live gebruikt.
Maar je zou er een sessie terug mee kunnen herstellen deserialiseren seriealiseren en met subklassen maar dan wordt het helemaal complex.

Het verschil is ...
standaart session filebased
met sessionhandeler kan je de data in de database krijgen.(ik hoor het wel als je behoefte hebt die weg in te slaan)
 
Laatst bewerkt:
Ik denk dat ik om dit probleem op te kunnen lossen de code van session.php nodig heb, in ieder geval de eerste 10 regels, maar liefst meer zodat ik de context beter snap. Of heb je al een andere oplossing gevonden?
 
@php4u ik hoop dat u voor u eigen spreekt.En de melding dat ik stukken uit mijn eigen systeem haal zie ik complement en u zal zich ooit de vraag stellen hoe ik die hoge snelheden kan halen.uw opmerkingen? ref:20 juni 2018, 00:12, 7 juni 2018, 23:26, 2 juni 2018, 17:08 , 21 mei 2018, 15:32 (je doet voor als mod)(volgens de regels kan je het nog niet worden)
Zonder ruzie te maken wil ik toch vragen om je een beetje in te binden! Ik doe mij zeker niet voor als moderator, maar jij voelt je blijkbaar een beetje in de discussie aangevallen.

Mijn statement die ik duidelijk maak is ook al enkele keren door anderen mensen geroepen, en enkele keren wordt er aan geërgerd, niet vaak, maar ik heb het een paar keer gezien.
Wees gewoon concreet en spring niet van de hak op de tak, en let een beetje op het niveau van de vraagsteller. Want interface en implements zijn echt niet relevant bij enkel een vraag over sessions.
Ik waardeer je prachtige uitgebreide code, maar in veel zaken kwak je die neer terwijl merendeel ervan niet relevant is. Mogelijk ben je er trots op, en dat kan ik me best voorstellen. Maar vraagstellers willen graag code voor hun probleem/vraagstelling, en geen hele brokken waar maar 90% onnodig is.

Verder als er problemen zijn met de sessie, dan moeten die worden opgelost. Het gebruik van een sessiehandler in dit soort problemen lijkt mij meer een vieze code-fix.
Als je jouw sessie-management wilt aanpassen en uitbreiden, dan bouw je daar pas een sessiehandler voor.
 
Laatst bewerkt:
Ik denk dat ik om dit probleem op te kunnen lossen de code van session.php nodig heb, in ieder geval de eerste 10 regels, maar liefst meer zodat ik de context beter snap. Of heb je al een andere oplossing gevonden?

Die staat in een vorig antwoord als eerste PHP blok.

Maar je zou er een sessie terug mee kunnen herstellen deserialiseren seriealiseren en met subklassen maar dan wordt het helemaal complex.

Het verschil is ...
standaart session filebased
met sessionhandeler kan je de data in de database krijgen.(ik hoor het wel als je behoefte hebt die weg in te slaan)

Dankjewel voor het aangerijkte idee. Mocht ik veel verder willen gaan dan ik momenteel doe, dan laat ik het zeker weten.

Zonder ruzie te maken
Ik waardeer je prachtige uitgebreide code.
Als je jouw sessie-management wilt aanpassen en uitbreiden, dan bouw je daar pas een sessiehandler voor.

Dankjewel voor de tip de sessiehandler te gebruiken als ik de sessie-management zou willen uitbreiden. Je vult kenikavanbis perfect aan die ook al zei dat je dit kunt gebruiken om de sessie in de database te krijgen.

Zolang ik niet hoger ga dan PHP 7.0 bij de host, werkt alles perfect zoals ik het oorspronkelijk had.
Mocht ik in de toekomst willen overschakelen naar PHP 7.1 of zelfs de php 7.2 (beta), dan is dit wel nog een probleem dat volgens mij echter bij de versie zit en nog dient uitgewerkt te worden of door andere funties vervangen te worden, maar dat zal de toekomst dan wel uitwijzen.

Nog eens iedereen die heeft helpen meedenken een dikke dankjewel.

:thumb:
 
Ik voorzie sowieso problemen in al je stukken code :).

Je doet namelijk overal op het eind nog een session_start. Die gaat sowieso voor fouten zorgen omdat je geen output mag genereren voor het aanroepen van die functie.

Wat gebeurd er wanneer je die functie op het eind weghaalt?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan