Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 15:52

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



PHP - Sessions - Verständnissfrage(n)

Discussion on PHP - Sessions - Verständnissfrage(n) within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1
 
TheFear's Avatar
 
elite*gold: 0
Join Date: Feb 2006
Posts: 757
Received Thanks: 40
PHP - Sessions - Verständnissfrage(n)

Schönen Tag!
Ich habe vor kurzem angefangen mein PHP-Wissen auf ein annehmbares Level zu bekommen. Jedoch bin ich bei Sessions total raus. Fertige Registrierung und Login steht. Doch schaue ich bei den vielen Session-Tutorials nicht durch.

Fühlt sich Jemand in der Lage mir kurz zu erklären, wie ich (am besten am Beispiel der Profilseite einer eingeloggten Person) Sessions benutze.

Ich bin leider ein totaler Bob und habe deshalb noch gar nix darüber kapiert. Also bitte auch nicht einen Block Code in den Thread reinschmeißen.

Nochmal kurz, da ich sehr merkwürdig schreiben kann: Wie kann ich mit Hilfe von Sessions dem Nutzer nach dem einloggen Inhalte zeigen bzw nur für ihn bestimmte Inhalte (Profil(ändern)/Einstellungen/etc).

Ein Link zu einem Tutorial, das nicht nur aus 10 Blöcken Code und 5 Zeilen Beschreibung besteht, würde mir sicherlich auch helfen, jedoch hat mich das mächtige Google da sehr im Stich gelassen.


Ach und Punkt2, der bei mir auch eben auftaucht. Ich komme absolut nicht drauf, wie ich nach dem Einloggen einen bestimmten Frame mit einer bestimmten neuen Seite ändere. Sprich. Startseite -> Einloggen -> der Frame, in dem nicht eingeloggt wurde, ändert sich.

PHP Code:
if($row->passwort == $passwort)
    {
    
$_SESSION["nickname"] = $nickname;
    print 
// Was kommt hier wohl rein?
    
}

else
    {
    echo 
"Satz mit X, war wohl nix.";
    }

?> 

Tausend dank an all diejenigen, die die Kacke bis hier lesen konnten und sich zudem noch dazu bereit erklären mir zu helfen.


Christian
TheFear is offline  
Old 07/10/2012, 19:25   #2

 
boxxiebabee's Avatar
 
elite*gold: 0
Join Date: May 2008
Posts: 1,222
Received Thanks: 500
Naja, einfach überprüfen ob die Session gesetzt ist?
Code:
if(!empty($_SESSION["nickname"]))
{
     echo 'eingeloggt';
} else {
     echo 'nicht eingeloggt';
}
boxxiebabee is offline  
Thanks
1 User
Old 07/10/2012, 20:21   #3
 
NotEnoughForYou's Avatar
 
elite*gold: 0
Join Date: Jun 2010
Posts: 3,406
Received Thanks: 2,024
Quote:
Originally Posted by boxxiebabee View Post
Naja, einfach überprüfen ob die Session gesetzt ist?
Code:
if(!empty($_SESSION["nickname"]))
{
     echo 'eingeloggt';
} else {
     echo 'nicht eingeloggt';
}
Und noch per isset sonst kriegt mab einen notice (auch wenn das nicht weiter stoert)
NotEnoughForYou is offline  
Old 07/10/2012, 21:15   #4

 
boxxiebabee's Avatar
 
elite*gold: 0
Join Date: May 2008
Posts: 1,222
Received Thanks: 500
Quote:
Originally Posted by NotEnoughForYou View Post
Und noch per isset sonst kriegt mab einen notice (auch wenn das nicht weiter stoert)
Nope, wird nicht angezeigt
boxxiebabee is offline  
Old 07/10/2012, 21:43   #5
 
NotEnoughForYou's Avatar
 
elite*gold: 0
Join Date: Jun 2010
Posts: 3,406
Received Thanks: 2,024
Wenn man error reporting bei allem hat schon... Wenn die session nicht gesetzt ist muesste man einen kriegen ... Zumindest bei xampp
NotEnoughForYou is offline  
Old 07/11/2012, 09:23   #6

 
boxxiebabee's Avatar
 
elite*gold: 0
Join Date: May 2008
Posts: 1,222
Received Thanks: 500
Hab's ja gestern bei xampp selbst mal ausprobiert, weil ich mir nicht sicher war, ist aber nix gekommen. Error reporting war natürlich ein.
boxxiebabee is offline  
Old 07/11/2012, 17:32   #7
 
.xShiine's Avatar
 
elite*gold: 0
Join Date: Dec 2011
Posts: 10
Received Thanks: 5
Ich würde es aber auch eher wie NotEnoughForYou machen,
weil:
isset prüft ob eine Variable exisitiert und ob sie nicht Null ist
!empty prüft ob eine Variable einen Wert hat.

Naja man sollte sich lieber direkt nen gescheiten Programmierstil angewöhnen,
sonst wird es nachher wieder schwer sich den Alten abzugewöhnen.

Ps. wenn die Variable den Wert 0 haben würde,
wäre !empty falsch, weil 0 = false ist.
.xShiine is offline  
Old 07/11/2012, 17:50   #8

 
boxxiebabee's Avatar
 
elite*gold: 0
Join Date: May 2008
Posts: 1,222
Received Thanks: 500
Quote:
Originally Posted by .xShiine View Post
Ich würde es aber auch eher wie NotEnoughForYou machen,
weil:
isset prüft ob eine Variable exisitiert und ob sie nicht Null ist
!empty prüft ob eine Variable einen Wert hat.

Naja man sollte sich lieber direkt nen gescheiten Programmierstil angewöhnen,
sonst wird es nachher wieder schwer sich den Alten abzugewöhnen.

Ps. wenn die Variable den Wert 0 haben würde,
wäre !empty falsch, weil 0 = false ist.
Das ist schon klar. Aber wenn der User eingeloggt wird, wird ne Session gesetzt, daher ist es nicht mehr Leer.
Beim Ausloggen wird die Session gelöscht, daher ist es leer.
Aber man kann das ganze natürlich auch mit isset machen. Ist meiner Meinung nach ne Geschmackssache.
boxxiebabee is offline  
Old 07/11/2012, 21:04   #9
 
.xShiine's Avatar
 
elite*gold: 0
Join Date: Dec 2011
Posts: 10
Received Thanks: 5
Quote:
Originally Posted by boxxiebabee View Post
Das ist schon klar. Aber wenn der User eingeloggt wird, wird ne Session gesetzt, daher ist es nicht mehr Leer.
Beim Ausloggen wird die Session gelöscht, daher ist es leer.
Aber man kann das ganze natürlich auch mit isset machen. Ist meiner Meinung nach ne Geschmackssache.
Naaaa ich glaube du verstehst nicht so ganz was ich meinte(würde bei !emptx auch auf das selbe hinauslaufen)^^
Wayne.
Semantisch gesehen macht isset für mich einfach mehr Sinn.
Man soll ja auch seine Scripts möglichst verständlich und semantisch korrekt schreiben.
.xShiine is offline  
Old 07/12/2012, 18:14   #10
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
Quote:
Originally Posted by .xShiine View Post
Naaaa ich glaube du verstehst nicht so ganz was ich meinte(würde bei !emptx auch auf das selbe hinauslaufen)^^
Wayne.
Semantisch gesehen macht isset für mich einfach mehr Sinn.
Man soll ja auch seine Scripts möglichst verständlich und semantisch korrekt schreiben.
Eigentlich müsste er beides abfragen. Mit isset frägt er ab, ob diese Session tatsächlich existiert. Und mit !empty frägt er ab, ob diese Session nicht eventuell einen leeren Wert hat.
Mikesch01 is offline  
Old 07/12/2012, 20:28   #11
 
PseudoPsycho's Avatar
 
elite*gold: 1715
Join Date: Dec 2011
Posts: 672
Received Thanks: 207
Quote:
Originally Posted by Mikesch01 View Post
Eigentlich müsste er beides abfragen. Mit isset frägt er ab, ob diese Session tatsächlich existiert. Und mit !empty frägt er ab, ob diese Session nicht eventuell einen leeren Wert hat.
Ähm... Nö! -.-
Mit !empty() fragt man ab, ob die Variable existiert und einen nicht leeren Wert hat. Das isset() kann man sich dann sparen...
PseudoPsycho is offline  
Old 07/13/2012, 14:37   #12
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
Quote:
Originally Posted by PseudoPsycho View Post
Ähm... Nö! -.-
Mit !empty() fragt man ab, ob die Variable existiert und einen nicht leeren Wert hat. Das isset() kann man sich dann sparen...
In der Praxis ja, aber semantisch nein.. und da gerade über die Semantik diskutiert wurde, hab ich mal meinen Senf dazu gegeben
Mikesch01 is offline  
Old 07/16/2012, 01:15   #13
 
tayfe's Avatar
 
elite*gold: 104
Join Date: Jun 2010
Posts: 547
Received Thanks: 127
Ehrlich gesagt glaube ich, das TheFear von dem, was hier bisher geschrieben wurde, nicht so viel verstanden wurde

Deshalb hier erstmal meine etwas ausführlichere Erklärung zu deiner Frage:

Eine Session ist in gewisser wie eine Variable, die allerdings (glaube auf dem Computer) Webseitenübergreifend gespeichert wird. Sie muss also nicht jedes mal per GET (tralala.de/user.php?username=user1) mitgesendet werden, sondern wird gespeichert und kann auf jeder Webseite ganz einfach per
PHP Code:
$_SESSION['name'
abgerufen werden.

Eine Session wird im Großen und Ganzem wie eine Variable gehandelt und wird auch auf gleiche Weise erstellt:

PHP Code:
$_SESSION['name'] = 'inhalt'
Wie man also sieht wird eine Session genau wie eine Variable erstellt. Genauso funktioniert das bei IF-Abfragen oder sonstigen Operatoren.

-----------------------------------------------------------------

Damit dir das ganze vielleicht nochmal etwas mehr einleutet, da du Sessions ja auch gerne in einem Loginsystem nutzen würdest, hier mal ein kurzes Tutorial für ein stark vereinfaches Loginsystem:



Wir benutzen in userem Beispiel erst einmal der einfachheit halber 3 Seiten. Natürlich kann man das auch problem in 1 oder in 1000 Seiten schreiben, aber das soll uns jetzt erstmal egal sein. Wir benutzen die Seite login.html, login.php und user.php. In der login.html befindet sich das Formular zum anmelden, in der login.php überprüfen wir, ob das Daten richtig sind und in der user.php befindet sich dann der interne Bereich, in den man nur hinein gelangt, wenn man auch wirklich eingeloggt hat (und optional auch die benötigen Berechtigungen hat).

Die login.html enthält wie bereits gesagt nur ein einfaches Login Formular. Da setzt ich jetzt einfach mal voraus, dass du weißt, wie so etwas aussieht. Trotzdem poste ich hier jetzt einfach nochmal den Code. Wenn man/du nicht weißt, wie so etwas funktioniert, kopier das nicht einfach, sondern versuche, es zu verstehen und lese dir ein Tutorial dazu durch! Durch Copy & Paste lernt man (fast) nichts!!

login.html:
PHP Code:
<html>
<
body>
<
form action="login.php" method="POST"
Username: <input type="text" name="username">
Password: <input type="password" name="password">
<
input type="submit" value="Login">
</
form>
</
body>
</
html
Das war einfach mal ein einfaches Formular für einen simplen Login. Nun kommen wir zur login.php:

PHP Code:
<?php

session_start
();

if(
$_POST['username'] == "User1" && $_POST['password'] == "test")
   {
   
$_SESSION['loginsystem_username'] = "User1";
   
$_SESSION['loginsystem_password'] == "test";
   echo
'<a href="user.php">Weiter</a>';
   }
else
   {
   echo
'<a href="login.html">Login fehlgeschlagen</a>';
?>

Das "session_start();" muss immer an den Anfang jedes Scipts!
Außer dem PHP-Starttag "<?php" oder "<?" darf nichts davor stehen!! Da gibt es keine Außnahmen.
Danach überprüfen wird die Werte von der Seite login.html, die wir per POST bekommen haben. In userem einfachen Beispiel sind die Logindaten "User1" mit dem Passwort "test". In einem größerem Loginsystem mit vielen Usern würde man jetzt die Werte mit einer MySQL Datenbank abgleichen, aber so weit will ich in diesem kleinem Tutorial nun auch nicht gehen. Außerdem würde man auch die Daten, sowohl "Username" als auch "Password" verschlüsselt speichern und am besten auch schon verschlüsselt weiter geben!
Naja, wie auch immer, bleiben wir jetzt besser erstmal bei unserem kleinen Login-System. Wenn wir nun auf die Seite kommen, werden wie schon gesagt die eingegebenen Daten mit den notwendigen Logindaten verglichen. Wenn diese richtig sind, erstellen wir 2 Sessions, "loginsystem_username" und "loginsystem_upassword". In diese beiden Sessions speichern wir die Logindaten. Danach wird dem Besucher ein Link angezeigt, über den er auf die nächste Seite gelangt, in userem Fall die "user.php".
Wenn die Logindaten falsch sind, bekommt der Besucher einen Link zu sehen, wie ihn wieder zum Loginformular zurück schickt.

Wenn man sich nun erfolgreich eingeloggt hat, gelangt man zur "user.php", in der dann die Inhalte angezeigt werden:

user.php:
PHP Code:
<?php
session_start
();

$username $_SESSION['loginsystem_username'];
$password $_SESSION['loginsystem_password'];

if(
$username "User1" && $password "test")
   {
   echo 
'Hallo '.$username.', sie haben sich erfolgreich eingeloggt';
   
//Hier koennen jetzt noch alle anderen moeglichen Inhalte zu sehen sein
   
}
else
   {
   echo 
'Dieser interne Bereich ist nur für eingeloggt user erreichbar. Bitte loggen Sie sich zuerst ein.';
   }

?>

Hier wird nun überorüft, ob der Inhalt der Sessions unseren Logindaten entspricht. Wenn dies der Fall ist, bekommt man die Inhalte des internen Bereichs zu sehen. Wenn nicht, wird man gebeten, sich zuerst einzuloggen.

Damit sind wir auch schon fertig Für alle, die PHP können und jetzt kritisch hier drauf gucken: Dies ist wirklich nur ein sehr einfachen Loginsystem und erklärt nur die prinzipielle Funktionsweise! Mit Sicherheit etc. hat das hier überhaupt nichts zu tun ...

Ich habe die Codes übrigens nicht selber getestet, es könnten sich also kleinen Fehler im Code eingeschlichen haben. Wenn jemand welche findet, darf er mir diese gerne mitteilen

Ich hoffe, dass ich besonders dir damit helfen konnte und wünsche dir viel Erfolg bei deinem Loginsystem!

PS: zum Thema Sessions, aber auch zu allen anderen möglichen PHP und MySQL Themen. Ich kann dir diese Seite wirklich nur extrem empfehlen!
tayfe is offline  
Thanks
1 User
Old 07/16/2012, 13:31   #14
 
PseudoPsycho's Avatar
 
elite*gold: 1715
Join Date: Dec 2011
Posts: 672
Received Thanks: 207
Quote:
die allerdings (glaube auf dem Computer) Webseitenübergreifend gespeichert wird.
Ja, mehr oder weniger.
Auf dem Rechner wird ein einzelner Cookie gespeichert, der die Session-ID enthält.
Der Server ordnet der ID dann die entsprechenden Werte zu und übergibt das dann PHP.

Das kann dir aber relativ gleich sein. Zu bearbeiten ist es (zunächst), wie ein ganz normales Array. Wie bei normalen Cookies bleibt der Wert jedoch erhalten, wenn die Seite gewechselt wird. Unterschied zu Cookies ist eben, dass der Nutzer die einzelnen Werte nicht einsehen oder verändern kann
PseudoPsycho is offline  
Old 07/17/2012, 11:38   #15
 
TheFear's Avatar
 
elite*gold: 0
Join Date: Feb 2006
Posts: 757
Received Thanks: 40
Danke, danke tayfe. Habe mich selber noch etwas damit auseinander gesetzt und dank deiner super Erklärung sind (zumindest bei Sessions) erst einmal alle meine Fragen beantwortet. Bin nun schon am Nachrichtensystem basteln. (:
TheFear is offline  
Reply




All times are GMT +1. The time now is 15:52.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.