Hallo liebes SoSci-Support-Team,
wir führen derzeit eine Studie durch, bei der Teilnehmende zunächst einige Seiten in SoSci Survey bearbeiten, anschließend zu einer externen Studie in Open Lab weitergeleitet werden und danach in dasselbe SoSci-Interview zurückkehren.
Die Weiterleitung erfolgt in SoSci mittels:
redirect(
'https://app.open-lab.online/studies/6FDQI?vpnnr=vpn'.$slot.'&_sosci=%caseToken%',
true
);
Open Lab speichert den übergebenen %caseToken% und leitet die Teilnehmenden am Ende wieder zu unserem SoSci-Fragebogen zurück. Dabei wird der Token als Parameter i übergeben:
https://sosci.sowi.uni-mannheim.de/hai/?i=<caseToken>
Grundsätzlich funktioniert dieser Ablauf: Die meisten Teilnehmenden gelangen nach Abschluss der externen Studie auf die nachfolgende SoSci-Seite und können dort ihre SONA-ID sowie anschließend die gewünschte Vergütung angeben.
Bei mindestens zwei Teilnehmenden ist jedoch reproduzierbar in den Daten ein anderes Verhalten dokumentiert. Beide berichteten uns unabhängig voneinander unmittelbar nach der Studie, dass sie zwar zu SoSci zurückgeleitet wurden, die vorgesehene Abfrage der SONA-ID am Ende jedoch nicht angezeigt worden sei.
Die betreffende Folgeseite ist Seite 4 unseres SoSci-Fragebogens. Ganz oben befindet sich dort ein PHP-Block, der einen zuvor reservierten Versuchspersonenslot als verwendet markiert:
$slot = value('VP01_01');
$token = caseToken();
if ($slot != '') {
$key = 'VPN-'.$slot;
$info = dbGet($key);
if (
$info !== false &&
isset($info[0]) &&
isset($info[2]) &&
$info[0] == 'RESERVED' &&
$info[2] == $token
) {
dbSet(
$key,
array(
'USED'
)
);
}
}
Direkt danach befindet sich auf derselben Seite die verpflichtende Frage nach der SONA-ID. Es gibt auf dieser Seite insbesondere keinen redirect(), goToPage(), pageStop() oder buttonHide().
Bei den beiden gemeldeten Problemfällen zeigt der Datensatz, dass Seite 4 tatsächlich erreicht wurde:
Problemfall 1
MAXPAGE = 4
LASTPAGE = 4
TIME004 = 17532
- SONA-ID leer
- nachfolgende Vergütungsfrage leer
- Interview nicht abgeschlossen
- der PHP-Code auf Seite 4 wurde ausgeführt, da der entsprechende Slot korrekt auf
USED gesetzt wurde.
Problemfall 2
MAXPAGE = 4
TIME004 = 16
- SONA-ID leer
- nachfolgende Vergütungsfrage leer
- Interview nicht abgeschlossen
- auch hier wurde der entsprechende Slot auf
USED gesetzt.
Insbesondere der zweite Fall erscheint uns auffällig, weil die Verweildauer auf Seite 4 mit 16 Sekunden völlig plausibel ist. Die betreffende Person schrieb uns etwa fünf Minuten nach Abschluss der externen Studie, dass die SONA-ID-Abfrage am Ende nicht erschienen sei.
Zum Vergleich funktionieren andere Interviews mit exakt demselben Ablauf problemlos. Dort wird Seite 4 nach der Rückkehr angezeigt, die SONA-ID gespeichert und anschließend die Vergütungsseite bearbeitet. Beispielsweise liegen für funktionierende Fälle TIME004-Werte von 14, 14, 47 und 14 Sekunden vor.
Wir haben inzwischen zusätzlich eine interne Diagnosevariable mittels put() am Anfang von Seite 4 ergänzt, um bei zukünftigen Fällen noch eindeutiger festzustellen, ob der PHP-Code der Seite serverseitig ausgeführt wurde.
Unsere Fragen wären daher:
- Ist die beschriebene Konstruktion mit
redirect(..., true), Rückgabe des %caseToken% als GET-Parameter i und anschließender Fortsetzung auf der Folgeseite grundsätzlich korrekt?
- Ist ein Verhalten bekannt, bei dem die Folgeseite nach einer solchen externen Rückleitung serverseitig ausgeführt wird, aber die auf derselben Seite folgenden Fragen im Browser nicht bzw. nicht vollständig angezeigt werden?
- Könnte der
dbGet()/dbSet()-Block am Anfang der Folgeseite hierbei eine Rolle spielen?
- Gibt es eine von Ihnen empfohlene robustere Konstruktion für diesen Ablauf?
Da die Erhebung aktuell läuft und der Ablauf bei der Mehrzahl der Teilnehmenden korrekt funktioniert, möchten wir nach Möglichkeit keine größeren Änderungen vornehmen, bevor wir die Ursache besser eingegrenzt haben.
Vielen Dank für Ihre Unterstützung!