php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Session Problem


 
MisterTiee
01-08-2003, 22:30 
 
Hallo, ich habe für eine Seite ein Script entworfen das User abfragt ob sie 18 sind oder nicht und dies mithilfe von einer Session gemacht, leider wird die Session immer zweimal abgefragt eh sie funktioniert...

Index Seite

<?
if(isset($_GET["m"]))
{
if(!isset($_SESSION["a"]))
{
include("alter/abfrage.htm");
}
else
{
if($_SESSION["a"] == 18)
{
include("alter/alter18.htm");
chdir("database");
include("shownews.php");
}
elseif($_SESSION["a"] == "unter18")
{
include("alter/unter18.htm");
}
}
}
else
{
chdir("database");
include("shownews.php");
}
?>


Die Seite in der die Session eingefügt wird:

<?php
session_start();
session_register("a");
$_SESSION["a"] = $_GET["a"];
header("Location: http://www.game-radio.net/artikel.php?right=".$_GET["right"]."&news_id=".$_GET["news_id"]."&m=1");
?>


Hoffe ihr könnt mir helfen.

 
muecke0815
01-08-2003, 23:25 
 
verstehe nicht ganz. oben ist die index? ohne session_start? woher soll php wissen das er eine starten muß?

und das zweite ist ein eingebundenes script, wenn ja wo wird es denn eingebunden?

die zeile session_register ist hier überflüssig.

 
MisterTiee
01-08-2003, 23:29 
 
ok sorry ich war nicht ausführlich genug. Es handelt sich um die Site game-radio.net, dort ist @session_start() ganz oben eingebunden.
In der Mitte kommt dann die Abfrage ob die Session vorhanden ist, falls nicht wird die abfrage.htm eingebungen, dort wird ein Link zu edit.php gesetzt, die edit.php definiert dann die Session und sollte eigentlich wieder zum Artikel wechseln und ihn anzeigen, mit einem kleinen Hinweis oben, leider kommt die Abfrage zweimal, bevor das Ganze funktioniert....

 
Abraxax
01-08-2003, 23:34 
 
warum ein @ vor dem sessionstart() ? :confused:

mache das mal weg.

was passiert dann?

kommt evtl. ne fehlermeldung alá header already sent ?

 
MisterTiee
01-08-2003, 23:38 
 
Nein es ändert sich nichts, keine Fehlermeldung das ganze klappt nach wie vor erst nach dem zweiten Klick

 
Abraxax
01-08-2003, 23:51 
 
ok. das ist ja schon mal was. denn das @ sollte man nur verwenden, wenn man eigene fehlerbehandlungen machen möchte. bei session_start() sollte aber nie ein fehler kommen, wenn alles richtig ist. ergo lasse das @ lieber weg, damit du auch einen fehler sehen kann.

so. jetzt noch einmal zu deinem problem. ich habe mit den code noch einmal angesehen......

wenn $_SESSION["a"] nicht isset() ist, machst du einen include von alter/abfrage.htm. ich nehme mal an, dass du dort dann $_SESSION["a"] einen wert zuweisst. oder? ( aber warum .htm als endung? )

liege ich mit meine letzten annahme richtig?

grundsätzlich kannst du auf registrierte session-vars erst auf der nächsten seite oder einem neuladen der selbigen darauf zugreifen. daher empfehle ich einen header('Location: index.php'); nach dem reggen zu machen.

 
MisterTiee
02-08-2003, 00:03 
 
Original geschrieben von Abraxax
wenn $_SESSION["a"] nicht isset() ist, machst du einen include von alter/abfrage.htm. ich nehme mal an, dass du dort dann $_SESSION["a"] einen wert zuweisst. oder? ( aber warum .htm als endung? )

Die Site führt immer zwei GET Werte mit sich die den Content anzeigen, bei der abfrage.htm werden zwei links angezeigt die zur edit.php, an diesen link werden diese GET Werte angehängt, habe allerdings das htm jetzt in php umgeändert, was auch nichts verbessert hat. In der edit.php wird dann der Session["a"] ein Wert zugewiesen.

grundsätzlich kannst du auf registrierte session-vars erst auf der nächsten seite oder einem neuladen der selbigen darauf zugreifen. daher empfehle ich einen header('Location: index.php'); nach dem reggen zu machen. [/B]

Genau da liegt das Problem, das Ganze soll so funktionieren das der Besucher bestätigt das er 18 ist und dann die Seite angezeigt bekommt die er sehen wollte...

EIne Frage: Gibts es eine maximale Anzahl von GET Werten die ich an eine URL hänge?

Mir ist gerade etwas aufgefallen was mich sehr verwundert:
Beim ersten Mal sieht der Link so aus:
http://www-user.tu-chemnitz.de/...php?...a=18&PHPSESSID=7ba8da89dfce46680c41eaffcdcc09a2
Beim zweiten Mal ändert sich aber die PHP Session ID, danach funktioniert dann die Weiterleitung....
http://www-user.tu-chemnitz.de/....php?...a=18&PHPSESSID=e10751863ba70b3b9fd2176377c328e8

Wie soll ich das jetzt deuten?
:confused:

Gibt es vielleicht eine einfachere Lösung das zu realisieren?

 
muecke0815
02-08-2003, 00:07 
 
Abraxax hat recht
wenn du schreibst

...abfrage.htm eingebungen, dort wird ein Link zu edit.php gesetzt
wie setzt du denn den link auf edit.php? das wird die session ja verloren!
dort kann sie ja nicht angegeben werden.

vorschlag: (weiß ja nicht genau wie die dateien aussehen ... kann ja auch ein form sein...)
abfrage.htm heißt ab jetzt abfrage.php und der link darin

..edit.php?<?=session_name()?>=<?=session_id()?>

 
Abraxax
02-08-2003, 00:10 
 
die session.id sollte sich eigentlich nicht ändern, solange du auf dem gleichen server bist.

aber dein session-problem könnte man so lösen....

<?
if(isset($_GET["m"]))
{
if(!isset($_SESSION["a"]))
{
include("alter/abfrage.htm");
}
else
{
if($_SESSION["a"] == 18)
{
// eine weiterleitung, wenn die 18 eben definiert ist....
header('Location: alter/alter18.htm');
// die korrekte url müsstest du reinschrieben.
}
elseif($_SESSION["a"] == "unter18")
{
// oder eine weiterleitung, wenn die 18 eben NICHT definiert ist....
header('Location: alter/unter18.htm');
}
}

}
else
{
chdir("database");
include("shownews.php");
}

?>

 
MisterTiee
02-08-2003, 00:13 
 
Original geschrieben von muecke0815
Abraxax hat recht
wenn du schreibst

wie setzt du denn den link auf edit.php? das wird die session ja verloren!
dort kann sie ja nicht angegeben werden.
[/PHP]

So sieht die Abfrage.php aus:

<?php
$url1 = "alter/edit.php?right=".$_GET["right"]."&news_id=".$_GET["news_id"]."&m=1&a=18";
$url2 = "alter/edit.php?right=".$_GET["right"]."&news_id=".$_GET["news_id"]."&m=1&a=unter18";
?>
<div align="center">
<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Der Artikel,
den du lesen willst, besch&auml;ftigt sich mit einem Spiel bzw. einer Thematik,
die nicht f&uuml;r unter 18j&auml;hrige zugelassen ist. Wir bitten daher um
eine Altersbest&auml;tigung. Die Angabe ist bindend und muss wahrheitsgem&auml;&szlig;
beantwortet werden. </font></p>
<p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="<?php echo $url1 ?>">Ja,
ich bin genau 18 oder &auml;lter</a></font></p>
<p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="<?php echo $url2 ?>">Nein,
ich bin unter 18 und m&ouml;chte diese Seiten nicht sehen</a></font></p>
</div>


Du meinst also bei diesem Vorgang geht dann die PHP Session ID verloren? Ich dachte immer die Session bleibt solange erhalten wie man auf der entsprechenden Seite ist... Würde das Problem gelöst werden wenn ich die PHP Session id manuell anhänge?

Danke für eure Hilfe, bin leider in Sachen PHP noch der totale nixkönner, obwohl ich versuche mir die meisten Sachen selbst herzuleiten und zusammenzubasteln...

 
Abraxax
02-08-2003, 00:16 
 
warum definierst du die links erst und schreibst sie dann rein?

du kannst das auch direkt machen... ;)


hast du schon meinen code getestet?

 
MisterTiee
02-08-2003, 00:19 
 
Original geschrieben von Abraxax
warum definierst du die links erst und schreibst sie dann rein?

du kannst das auch direkt machen... ;)


hast du schon meinen code getestet?
ne das mit den links reinschreiben is mir zu unübersichtlich

hm dein code würde mein gesamtes konzept übern haufen werfen, weil diese abfrage wird direkt ins design eingebunden, werds aber trotzdem mal probeweise testen

 
Abraxax
02-08-2003, 00:21 
 
werds aber trotzdem mal probeweise testen genau darauf wollte ich hinaus. denn damit solltest du keine problem haben.

du brauchst ja quasi nur ne zwischenseite für die unterscheidung. und in deinen 18er dateien solltest auch auch immer zu beginn prüfen, oder 18 auch in der session steht. denn wenn nicht, solltest du auch deine startseite linken.

 
muecke0815
02-08-2003, 00:24 
 
das ist wohl richtig das die session erhalten bleibt. aber ... nur solange php in der lage ist sie auch abzulagern! und damit er sie hinterher auch finden kann greift er ja auch meist auf die cookies zurück ... nur ... so könntest du sie verlieren wenn cookies nicht erlaubt sind.

ok gebe zu es kommt nicht oft vor. aber ich glaub hier im forum hab ich auch schon das ein oder andere wegen einer verlorenen session gesehen ...

wollte nur vorbeugend wirken.

 
MisterTiee
02-08-2003, 00:45 
 
@muecke: Dieses Cookie Problem ist mir bekannt, ich baue eigentlich immer ein Hinweis ein, das man Cookies aktivieren soll.

@abraxax:
Die Lösung mit dem header "scheint" (der Langezeittest wirds zeigen) zu funktionieren.

Vielen Dank euch beiden. :)

 
Abraxax
02-08-2003, 00:51 
 
Original geschrieben von MisterTiee
@abraxax:
Die Lösung mit dem header "scheint" (der Langezeittest wirds zeigen) zu funktionieren.BEEP. falsche antwort... :D

es muss heissen:
oh mein meister Abraxax. deine lösung ist das ideal, was ich gesucht habe. deine lösung ist perfekt und funktioniert einwandfrei. auch später im produktiven einsatz wird es keine probleme geben. es sei denn .... es treten schwere fehler auf.

so das wars noch von mir .... :D

 
MisterTiee
02-08-2003, 00:53 
 
Original geschrieben von Abraxax
BEEP. falsche antwort... :D

es muss heissen:
oh mein meister Abraxax. deine lösung ist das ideal, was ich gesucht habe. deine lösung ist perfekt und funktioniert einwandfrei. auch später im produktiven einsatz wird es keine probleme geben. es sei denn .... es treten schwere fehler auf.

so das wars noch von mir .... :D

haste meine mail nicht erhalten in der ich dir angeboten habe dich den ganzen Tag anzubeten? :D

 
Abraxax
02-08-2003, 00:59 
 
Original geschrieben von MisterTiee
haste meine mail nicht erhalten in der ich dir angeboten habe dich den ganzen Tag anzubeten? :D ach du warst das, der mir vorerst einen altar
und in einem jahr einen tempel errichten wollte.
ich habe mich schon gewundert.... :D


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:09 Uhr.