zorg.ch
by @ 08.11.2002 10:55 - nach oben -
hätte gerne php-coderhilfe

...und wo finde ich die am besten? natürlich bei zorg. hey, orkus and company... könnt ihr mir mal irgendein beispiel über zwei seiten schicken, die ein login behandeln? ich müsste zuerst die eingaben mit der tabelle vergleichen, danach die session eröffnen und dann das flag "online" in der tabelle auf 1 setzen. im php bin ich nicht mehr wirklich schlecht, immerhin proge ich jetzt seit einem monat php, abär die scheiss sessions...

link auf die seite, die den login bräuchte:
EASELI.CH - neue version
zorg.ch
#13937 by @ 08.11.2002 11:11 - nach oben -
ich hab meinen PHP - Coder von hier

http://www.phpide.de/

der ist echt gut...
zorg.ch
#13940 by @ 08.11.2002 11:26 - nach oben -
merci, schon mal ein anfang... aber was bringt mir das ganze betreffend sessions? php habe ich sont eigentlich noch keine probleme, die ich nicht lösen konnte gehabt!
zorg.ch
#14117 by @ 11.11.2002 22:44 - nach oben -
hätt da ein buch zu empfehlen

php 4 - grundlagen und profiwissen - von jörg krause - hanser verlag

das buch ist top und man findet alles!
zorg.ch
#14118 by @ 11.11.2002 22:56 - nach oben -
Ja das kann ich bestätigen habs mir auch schon gekrallt ist einfach spitze
zorg.ch
#14184 by @ 13.11.2002 02:27 - nach oben -
Habs mir beim schnuppern in der alten bude ausgeliehen. Kam leider nur zur seitenzahl 20, was dann geschah ist non of your business.
zorg.ch
#13942 by @ 08.11.2002 11:54 - nach oben -
ach so... :)

die Sessions löst du eigentlich ganz einfach... du beginnst einfach alle Seiten mit folgendem Code (noch bevor irgendwelches HTML ausgegeben wird!!!):

session_save_path("sessions"); //das ist der Ordner, in dem die Sessions gespeichert werden
session_start(); //hier wird sie gestartet


danach kommt es nicht mehr darauf an, ob schon HTML ausgegeben worden ist oder nicht...

dann kontrollierst du, ob die Eingaben richtig sind...

wenn ja, kannst du sie in der Session registrieren:

session_register(user);
session_register(passwort); //ja, ohne das $ - Zeichen

löschen kannst du die Sachen mit:

session_unregister(user);
session_unregister(passwort);

die ganze Session löschst du mit:

session_destroy();


und das ist der ganze Zauber... mehr brauchst du eigentlich nicht unbedingt zu wissen...
zorg.ch
#13962 by @ 08.11.2002 20:02 - nach oben -
benutzen kannst du sie dann mit
$user
$passwort

Diesen code finde ich gut: (braucht kein register-zeugs)
session_start();
// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>

Sessions in php

zorg.ch
#13965 by @ 08.11.2002 21:29 - nach oben -
also...session's sind was sau gemütliches und auch nicht besonders kompliziert.

session ist allerdings nur gemütlich wenn php mit "--trans-sid" kompiliert wurde, ansonsten musst du nämlich die session ID von hand weitergeben.

kurzes erläuterung wie das session-handling funktioniert:

sessions sind grundsätzlich cookies (also files) auf dem server. Die session ID die du meist im URL-Feld deines Browsers findest, gibt an in welchem File deine Daten (cookie values) gespeichert sind. Damit PHP weiss das du eine session hast muss dein Browser diese session ID's über $_COOKIES[], $_POST[] oder $_GET[] jeder neuen seite neu übergeben.

Meine Erklärung funtioniert mit register-globals = off

empfehlens wert zum anfangen ist in jedemfall

set_ini("session.use_cookies","off");
damit die session ID nicht als cookie gespeichert wird sondern immer schön per querystring weitergereicht wird...ist so auch einfacher zum debuggen.

Beim Login ist es ansich ein ganz normaler POST:

du überprüfst username, und password, wenn beides stimmt kannst du das verwenden:

session_start(); //brauchst du eigentlich nicht, mach ich mir mehr zur Übersicht.

Var's benennung: es ist sinnvoll wenn du session vars mit s_varname benennst, da du dann sicher nie eine session-user-id mit einer post-user-id verwechselst.

die user_ID aus deiner DB Table speicherst du dann so in dieses session file aufm server:

$_SESSION['s_deinvarname_für_die_session_user_id'] = $user_id;

hier empfielt es sich ein location-replace zu machen:
header("Location: http://www.meinserver.ch/login.php?PHPSID=".session_id()");

mit session_id(); kannst du die aktuelle session ID herausfinden, bei einem header-location-replace hängt PHP nicht von selbst die session ID an die URL, darum musst du das in diesem fall selber machen.

so nun musst du auf jeder page die sessions verwenden wollen prüfen ob eine solche besteht und wann ja das session-handling starten.

z.b

if(isset($_SESSION['s_user_ID'])) {
session_start();
}


genau gleich kannst du überprüfen ob jemand eingeloggt ist...

logout...hm na ja da bin ich nicht so der speziallist, wie ihr ja seht kann man sich bei z.org nicht normal ausloggen, aber ich würds so machen:

if(isset($_POST['logout_button'])) {
unset($_SESSION['s_user_ID']);¨
...
session_destroy();

und wieder nen header-location-replace, diesmall allerdings ohne ein session ID anzuhängen.

}
zorg.ch
#13969 by @ 08.11.2002 23:55 - nach oben -
Du nimmst mir das Wort aus dem Mund
zorg.ch
#13977 by @ 09.11.2002 10:10 - nach oben -
äbä gell, habs mir beinahe noch gedacht.
zorg.ch
#14025 by @ 10.11.2002 17:37 - nach oben -
und wie macht mans, dass es immer über die Querystring gehandelt wird?
zorg.ch
#14026 by @ 10.11.2002 17:40 - nach oben -
nur...ist n scheiss...dann musst du's immer von hand machen, da bei nem form die daten per hidden feld übergeben werden.
zorg.ch
#14034 by @ 10.11.2002 17:59 - nach oben -
überall autom. ausser bei den Forms von hand? gekauft.
zorg.ch
#14039 by @ 10.11.2002 18:07 - nach oben -
es bringt dir aber nichts wenn dus bei forms per hand machst, da php da nur in den POST daten nach der session ID sucht.
zorg.ch
#14063 by @ 10.11.2002 21:45 - nach oben -
hüh? also keine GET-Forms? GET = Querystring, und das tut ja?
zorg.ch
#14067 by @ 10.11.2002 22:26 - nach oben -
ja....aber wenn es im form array was drinn hat geht er nur auf post.

ausserdem was ist daran so falsch ?
zorg.ch
#14094 by @ 11.11.2002 19:42 - nach oben -
hüh? du meinst, wenn er post Daten kriegt, checkt er get nicht? das gilt aber immer.

Session Management mit Cookies = unedel
zorg.ch
#14095 by @ 11.11.2002 19:45 - nach oben -
hai...du scheinst nicht zu kapieren...wenn du -enable-trans-sid drin hast macht er bei links per ?sessid=xy und bei forms macht er ein hidden feld mit der session id...wen PHP jetzt was per Post bekommt schaut es gar nicht mehr in das GET array, ausser du greifst bischen tief in die configs ein, was allerdings zur folge haben kann das dann andere sachen nicht mehr wie gewohnt laufen.

cookies sind in diesem fall nicht nötig. z.org hat auch keine session-cookies, so viels mir isch.
zorg.ch
#14100 by @ 11.11.2002 20:42 - nach oben -
PHP macht automatisch nen Hidden Feld für die Sessionid bei Forms?? Very Sexy!!
Das Post/Get Problem scheint aber am HTTP zu liegen, nicht am PHP.
Additional posts
zorg.ch
#14123 by @ 12.11.2002 08:38 - nach oben -
du musst das hiddenfeld aber schon selber schreiben, oder? und übrigens: was ist wenn ich eine alte php-version habe? ich sollte glaube ich mit $HTTP_SESSION_VARS arbeiten! kann mir einer erklären, wie ich dann die daten handle? einlesen per
<?php

session_start();

$HTTP_SESSION_VARS['s_userid']= $id //vom benutzer die id
$HTTP_SESSION_VARS['s_pass']= $pass //des benutzers passwort
?>

aber wie lese ich die aus? ich programmiere seit der 5. klasse, aber so etwas ist mir noch nie untergekommen!
ich weiss, ich studiere sehrwahrscheinlich viel zu weit.
Additional posts
zorg.ch
#14127 by @ 12.11.2002 10:15 - nach oben -
jo so. kannst du mir das mit der kompilat heizung erklären?
Additional posts
zorg.ch
#14129 by @ 12.11.2002 11:24 - nach oben -
sind was saugemütliches wenn mans kapiert, hä? mein scheiss (ja, ich reg mich jetzt nach einer woche testen langsam aber sicher auf, und zwar deftig!!!) code will und will einfach keine sessionid generieren. ich sehe immer oben anstatt die sessionID die direkten variablen mit den dazugehörigen werten. z.B.:
easeli.ch/test/index.php?userid=easy&pass=iseli&submit=login

wie muss ich das richtig stellen???????
zorg.ch
#14130 by @ 12.11.2002 13:06 - nach oben -
was ist den jetzt das problem ?
zorg.ch
#14131 by @ 12.11.2002 13:39 - nach oben -
keine ahnung!!!!
ich habe dir hier mal den code, den ich mir zum testen ob ein login funktioniert geschrieben habe:

user ist der nickname
pass ist das passwort
s_user ist in der session der nickname
s_pass ist in der session das passwort

---
index.php
***
<?php
session_start();
$_SESSION['s_user']= $user;
$_SESSION['s_pass']= $pass;
?>


Login


















---
index2.php
***
<?php
session_start();
?>




Ausgabe




<?php echo SID ?>



<?php
echo $s_user;
echo $s_pass;
//echo $_SESSION['s_user'];
//echo $_SESSION['s_pass'];
?>






kannst du etwas mit dem sch***s anfangen?
noch nebenbei: wie lange ist so eine session gespeichert?
zorg.ch
#14132 by @ 12.11.2002 13:42 - nach oben -


login_prozedur.php...wasn das fürn file ? hast du register_globals = On...

die session ist solange gespeichrt bis du sie mit session_destroy(); killst oder bis der user eine gewissen zeit nichts mehr gemacht hat, normalerweise 24min.

zorg.ch
#14133 by @ 12.11.2002 13:53 - nach oben -
sorry, aktion nicht herausgenommen! habe vorher noch was probiert(die daten per anderem php-file zu übertragen)! aber wie muss mein tag korrekt sein? gar keine argumente?

sonst würde es stimmen, oder wie?
zorg.ch
#14134 by @ 12.11.2002 13:56 - nach oben -
action=$_SERVER[PHP_SELF]
zorg.ch
#14135 by @ 12.11.2002 14:01 - nach oben -
übrigens merci, dass du dir zeit und vor allem geduld nimmst für mich... ich finde das gar nicht selbstverständlich...
zorg.ch
#14165 by @ 12.11.2002 23:13 - nach oben -
manchmal machen wir coder-sessions, an nem WE-Tag coden wir was zusammen. In Zukunft wollen wir diese Treffen öffentlich machen; wär sicher was für dich.
zorg.ch
#14187 by @ 13.11.2002 07:51 - nach oben -
wär sicher was für mich. nur komme ich von hinter dem ricken (von euch aus gesehen) und habe nicht die möglichkeit (zug) mich an den zorg-treffen einfach so mal sehen zu lassen. aber die coder-session wäre noch cool, denn ich lerne wie schon gesagt jetzt php...
zorg.ch
#14136 by @ 12.11.2002 14:26 - nach oben -
ja was passiert denn hier?
meine argument "action" im beschriebenen fall?

man sollte die sessionID in der url sehen, nicht? ich sehe sie nicht... das hiddenfeld in dem formular ist auch nicht vorhanden (auch dann wenn ich es vom server hole) und ich kann die werte nicht auslesen...

und wie leite ich auf das file um in dem ich eingeloggt bin? oder kann ich dafür if eingeloggt verwenden?

übrigens: die obenbeschriebenen php-files sind online unter easeli.ch/test abrufbar...
zorg.ch
#14137 by @ 12.11.2002 14:34 - nach oben -
also du registrierst die session-vars ja im selben file wo du auch das login-formular hast, nun musst du als action $_SERVER[PHP_SELF] angeben.

nach dem du die session gestartet hast musst du das erste mal selber dafür sorgen das die session ID weiter gegeben wird.

header("Location: http://www.deinedomain.ch/eingeloggt.php?".session_name()."=".session_id());

so nun kannst du die session vars im stil von echo $_SESSION['s_var']; ausgeben. Hier sollte auch grad automatisch die session id an jeden link gehängt werden, sofern du trans-sid aktiv hast.
zorg.ch
#14138 by @ 12.11.2002 14:39 - nach oben -
gleich mal testen...
zorg.ch
#14139 by @ 12.11.2002 14:45 - nach oben -
hmmm.... wegen dem header jumpt er jetzt bevor ich das formular sehe weiter in die eingeloggtseite. wohin muss ich den header genau schreiben? oder per if checken ob das form ausgefüllt wurde?

ABER:

juhuuuuu, die sessionID wurde generiert!!!! danke, danke, danke, danke....
zorg.ch
#14144 by @ 12.11.2002 18:34 - nach oben -
ist eigentlich egal wo hin du gehst mit dem header(); wichtig ist nur das du die session_ID anhängst.

header kommt vor body...http ist wie ein mensch...-)
Additional posts
zorg.ch
#14380 by @ 18.11.2002 22:14 - nach oben -
Dave, sag mir, wie ich dieses Layout Problem am besten löse.

langewörter-de.undsoweiteretceteraundmistfängtdortanwoderwolfdasrottkäppchenfrisstunddenjägerrunterschluckt
zorg.ch
#14389 by @ 18.11.2002 23:20 - nach oben -
lang lebe wordwrap!
Additional posts
zorg.ch
#14299 by @ 15.11.2002 13:20 - nach oben -
jaja... ich hans ändlich gschafft! min lehrmeischtär hät mär än seich aageh, beträffänd php-version ufäm server! abär jetzt da allä funktioniärt, chöndär si ungeniert go aaluägä...
nur dä login muän ich im momänt no sälbär machä, falls är also einä wännd, müästädär äs meil a mich schriibä!

EASELI.ch

merci oi allnä für diä prompti hilf...

piiiiiiiiiiiiiiiiiiiis
zorg.ch
#14313 by @ 15.11.2002 16:01 - nach oben -
fiz doch'n Login-anfrage formular rein :)
zorg.ch
#14373 by @ 18.11.2002 07:56 - nach oben -
habe ich schon noch vor, keine angst! aber das iimeil geht trotzdem zuerst an mich, und ich muss es eintragen.
zudem ist die page eh noch im alpha-stadium, wie du vielleicht bemerkt hast. die alte site ist ja noch online.

aber bald nicht mehr...
zorg.ch
#14372 by @ 18.11.2002 07:52 - nach oben -
andere frage: wie kann ich ein flag ("online";int) auf 0 zurücksetzen, wenn der benutzer sich nicht manuell ausloggt? wenn man ausloggen klickt, schliesst sich die session und das flag wird wieder auf 0 gesetzt. aber wenn er einfach das fenster schliesst, schliesst die session nicht manuell, ODER?