Hallo,

Ik ben nu een tijdje bezig om te proberen een nieuwe session id te genereren zonder de browser te sluiten, maar dat lukt me niet.

Ik heb een vragenlijst die uit meerdere pagina's bestaat. Ik maak iedere keer sessie variabele ervan, zodat er ook weer een stap terug gedaan kan worden om toch nog wat te veranderen. Tussen door worden de gegevens iedere keer opgeslagen in de database waar de sessionid over eenkomt. Dit werkt allemaal.

Probleem nu is de lijst is ingevuld en klaar. Dan wil ik voorkomen dat als dan iemand anders die naast hem zit hem ook meteen in gaat vullen en dat alles onder dezelfde sessieid opgeslagen word.

Er zijn aan de hand van de vragen meerdere mogelijkheden van welke vervolg vragen vertoont worden. Als een vragenlijst voor iemand ophoud eindig ik met

session_unset(); 
session_destroy();


Als hij dan nog iets van vorige doet (in de browser) dan kan hij het niet meer opnieuw oppakken. Alle sessie data is leeg en word "af gevangen" met

if (empty($_SESSION['sessionid']))
	{
	echo'Uw sessie is verlopen. Begin opnieuw om de vragenlijst in te vullen';
	}


Ik laat ze weer naar de begin pagina terug gaan waar ik boven aan het staan

session_start();
session_regenerate_id();
$_SESSION['sessionid']= session_id();


waarbij dit mijn laatste probeer versie is, want ik heb er al het nodige variaties op gehad. Ik had ook ergens gelezen dat er true moest staan tussen de haakjes bij session_regenerate_id() maar later begreep ik dat alleen de output daarvan true of false is als dat wel of niet lukt.

Heeft iemand een andere suggestie hoe ik dit het beste kan regelen, of hoe het werkend te krijgen? Want zo langzamerhand weet ik even geen nieuwe varianten te vinden.
Zelf een sessionID genereren?

[code]
<?php
function generateSessionID()
{
return substr(sha1(time().$_SERVER['REMOTE_ADDR'].time()), 0, 32);
}
Harstikke bedankt,

Dit werkt inderdaad wel. Hoewel ik wel nog even uit ga zoeken wat er nou allemaal in die functie gebeurt, want er zijn wel wat dingen daarin abracadabra voor me :)
Wat doe jij verder met het sessionid dat de gene die er naast zit het ook invult?
Die heeft toch een eigen sessie? Je slaat de gegevens toch alleen tijdelijk op in de sessie? Dan boeit het niet als mensen uiteindelijk toevallig na elkaar hetzelfde sessie id hebben.
Wat ik ermee bedoelde is dat als 1 persoon de vragen afgerond heeft en hij weer terug gaat naar het begin scherm en de vragenlijst door een ander in laat vullen. De sessie is wel leeg, maar als er weer een nieuw id gegenereerd werd was het volgens mij zo dat dezelfde weer aangemaakt werd. In de DB werd in ieder geval dezelfde query overschreven waar sessieid = sessieid.
Op de begin pagina had ik eerst.


<?php
$_SESSION['sessionid']= session_id();
?>


Als het formulier dan klaar was deed ik

<?php
session_destroy();
?>


Dan was hij ook leeg wat ik merkte vanwege de if empty sessie dat ik eerder liet zien.
Terug op de begin pagina werd dan toch weer de oude sessie hervat op de een of andere manier. Ik weet ook niet precies waardoor. Als ik de browser af sloot werd er wel een heel nieuw id gemaakt. Vandaar dat ik daarna het probeerde met regenerate_id
Waarom sla je het sessie id op? Dat kan weer terug komen. Het is random maar niet perse uniek.
Omdat ik even niet een andere mogelijkheid wist. Na de eerste pagina gebruik ik een INSERT als er nog geen sessieid overeenkomt in de DB en ik gebruik een UPDATE als er wel al zo een sessieid is.
Mijn primary key in de DB is id en die word iedere keer 1 groter. Ik zou niet weten hoe het daar aan te koppelen. Als de eerste pagina is ingevuld word er een nieuw id aangemaakt en de dingen onder dat id in de DB gezet, maar ik weet niet welk id het dan heeft gekregen. Als er dan besloten wordt een stap terug te gaan om iets te veranderen, dan weet ik niet bij welk id dat moet gebeuren terwijl ik nu het volgende kan doen om het in de goede query te krijgen want de sessieid is dan al aangemaakt en bekend voor mij.


<?php
$query = mysql_query("SELECT * FROM quickscan WHERE sessionid = '$sessionid' ", $connection);
?>
Dan kun je bij het begin een insert doen.
Met [php]mysql_insert_id[/php] het id ophalen en dat in je sessie opslaan.
Als de enquete ingevuld is kun je het id uit je sessie halen en is het geen probleem dat er nog iemand met hetzelfde sessie id komt.

Reageren