• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Sessions... und ich raffe es nicht

nwibs

New member
Moin,
nach längerer Zeit stehe ich mal wieder total auffem Schlauch :whacky:

Nachdem ich jetzt öfters mal gesehen habe, dass auf manchen Seiten bei Klick auf einen Link die URL dann via sessions verschlüsselt werden (hoffe es versteht wer was ich meine), stellt sich mir als erstes die Frage ob sowas überhaupt sinn macht, da es ja nicht um "geschützte" Bereiche geht?!

So, die Frage vorher kam mir erst später auf, nachdem ich an sessions heute fast verzweifelt bin :whacky:
Ich hab zig Tutorials und Foren durchkämmt und verstehe nur Bahnhof .. kA warum, aber wahrscheinlich ist die Antwort total einfach.
Wie mache ich es nun, das in der Adresszeile des Browsers z.bsp. nicht mehr [domain]/index.php?content=beispiel steht, sondern es mit der SID dort steht??

Mein Bereich, wo der Content "rein kommt" sieht so aus:
PHP:
<?php
	if(isset($_GET['content']) AND isset($dat[$_GET['content']])) {
       	    include $dat[$_GET['content']];
	} else {
	    include $dat['home'];    }
?>
Muss da wenn auch etwas dran geändert werden?
Wie gesagt, ich stehe total auffem Schlauch und raffe es total nicht :(
Über eine plausible Erklärung ohne nur ein Tutorial oder einen Befehl zu nennen wär mir verdammt hilfreich, auch wenn das für einige sicherlich jetzt ein grosses lächeln abringt ;)

danke im voraus...

mfg nwibs
 
nwibs schrieb:
Nachdem ich jetzt öfters mal gesehen habe, dass auf manchen Seiten bei Klick auf einen Link die URL dann via sessions verschlüsselt werden (hoffe es versteht wer was ich meine), stellt sich mir als erstes die Frage ob sowas überhaupt sinn macht, da es ja nicht um "geschützte" Bereiche geht?!
Geschützte Bereiche ist der richtige Ausdruck, Sessions haben mit Verschlüsselung und dergleichen nix zu tun. Der Sinn? Einfachere Programmierung wenn Sessions von Anfang an gelten, Verfolgung der besuchten Seiten, Identifizierung des Benutzers, usw. usf.
nwibs schrieb:
Wie mache ich es nun, das in der Adresszeile des Browsers z.bsp. nicht mehr [domain]/index.php?content=beispiel steht, sondern es mit der SID dort steht??
Entweder du machst es so wie ich und benutzt nicht die PHP-interne Funktion für Sessions sondern schreibst dir eine eigene, oder du benutzt die PHP-interne dann wird dies automatisch gemacht. Wenn enable_trans_sid in der php.ini auf true gesetzt ist, dann ist sie nicht sichtbar für den (großteil der) Benutzer, ist aber gesetzt.
 
RoyalKnight schrieb:
Geschützte Bereiche ist der richtige Ausdruck, Sessions haben mit Verschlüsselung und dergleichen nix zu tun. Der Sinn? Einfachere Programmierung wenn Sessions von Anfang an gelten, Verfolgung der besuchten Seiten, Identifizierung des Benutzers, usw. usf.
War teilweise vllt. etwas "blöd" meinerseits Ausgedrückt, nur mir viel keine bessere Umschreibung ein :whacky:
Das es für "Geschützte Bereich" sinn macht kann ich noch nachvollziehen, nur auf Frei zugängliche Bereiche verstehe ich es (noch) nicht, wo es einfacher ist :confused:

RoyalKnight schrieb:
Entweder du machst es so wie ich und benutzt nicht die PHP-interne Funktion für Sessions sondern schreibst dir eine eigene, oder du benutzt die PHP-interne dann wird dies automatisch gemacht. Wenn enable_trans_sid in der php.ini auf true gesetzt ist, dann ist sie nicht sichtbar für den (großteil der) Benutzer, ist aber gesetzt.
Um Sessions überhaupt zu benutzen müsste ich das "System" der Sessions verstehen, dann könnte ich mir überlegen was besser ist für mich. Nur da ich gerade mal die Session starten kann und dann auf der ersten Seite mir die session id mit echo ausgeben lassen kann (ja, ich weiß, eigendlich sehr peinlich :( ) dürfte ich ein Problem haben, aus diesem Grunde würde ich mir das gerne (vllt. auch mit einer konkreten Hilfestellung) erklären lassen, weil ich manchmal einfach schwer von Begriff bin (kann ja nicht jeder ein Einstein sein :grin: ).


mfg nwibs
 
Etwas in die PHP eigene Session zu parken ist denkbar einfach:

$_SESSION['wert'] = 'value';

auf der nächsten Seite machst du ein echo $_SESSION['wert'] und es sollte value ausgegeben werden :).

Wenn du geschützte Bereich über eine Session vor unbefugten Zugriffen schützen möchtest, sollte die SESSION_ID niemals an die URL angehängt werden. Fängt jemand diese URL ab, könntest du arge Probleme bekommen das jemand eine session "hijacked" (entführt und sich als jemand anderes ausgibt).
 
Ok, das ist ja im Endeffekt wie wenn ich mit "normalen" Arrays arbeite, oder?!?

Zur Zeit verarbeite ich meine Links in Arrays und rufe sie im <a> mit "index.php?content=seite" auf und so steht das dann ja auch in der Adresszeile des Browsers.
Wo/wie/was muss ich jetzt machen, das "seite" als Session-ID (?) ausgegeben wird, also z.Bsp. "index.php?content=0dcb1be416dba2bbf1aa613d4dcb286a" ?!? :whacky:
Langsam zweifel ich an mir selber, dass ich da nicht durchsteige und euch mit nerven muss.


mfg nwibs
 
Wenn du geschützte Bereich über eine Session vor unbefugten Zugriffen schützen möchtest, sollte die SESSION_ID niemals an die URL angehängt werden. Fängt jemand diese URL ab, könntest du arge Probleme bekommen das jemand eine session "hijacked" (entführt und sich als jemand anderes ausgibt)
Das verstehe ich nun nicht ganz - wird die id in einem Cookie gespeichert, kann die sessionId doch genausogut abgefangen werden?

Um Sessions überhaupt zu benutzen müsste ich das "System" der Sessions verstehen, dann könnte ich mir überlegen was besser ist für mich

Sessions sind dazu da, Zustände zu speichern. Falls z.Bsp. jemand eine Seite anbietet, welche erlaubt die Seitenhintergrundfarbe zu ändern, kann er dies entweder mit z.Bsp. GET Variablen tun: Dann muss aber bei jedem Link, der angewählt wird, die entsprechende Farbe an die URL angehängt werden.

<?if !isset ($color) $color="'white'";?>
<body bgcolor = <? echo $color?>>
<a href = "seite2.php?color=<?echo $color;?>"> Seite 2 </a>
viel Text...
<?include "selectColorMenu.php";?>
</body>
</html>
Nun funktioniert dies mit einer Variable ziemlich gut, wenn nun aber für jede Seite noch die Textfarbe gewählt werden soll, und die Linkfarbe, sowie die Farbe der aktiven Links, dann wird die Sache doch etwas komplizierter. Nun könnte man auf die Idee kommen, die Einstellungen, die jeder Besucher tätigt, in einer Datei zu speichern, und zwar myColor1.txt für Besucher 1, myColor2.txt für Besucher2 etc.
Dann steht in myColor1.txt z.Bsp:
color:red
bgcolor:blue
linktextcolor:yellow
linktextcoloractive:green
etc.

Nun reicht es aus, die ID des Besuchers zu kennen, und man kann alle Werte auslesen, die dieser Besucher gespeichert hat. Das heisst, mit dem Link <a href="seite2.php&id=<?echo $id>"> kann ich nun die Datei myColor$id.txt auslesen, und habe so alle benötigten Variablen - mit bloss einer ID.

Natürlich muss man dann noch ein System finden, das alte Sessions wieder löschen kann. Dies ist etwas komplizierter, und PHP macht das über diverse Wahrscheinlichkeiten, welche in der ini Datei festgelegt werden. Ausserdem wird der Session Wert aufgrund der momentanen Zeit berechnet, und mit einer (evt. selbt gewählten) Zufallsfunktion verschllüsselt, um das "Erraten" aktueller Sessions zu erschweren. (Damit nicht Besucher 1 plötzlich die Daten von Besucher 3 ausspionieren kann).


Jedenfalls brauchst Du dich um diese Details nicht zu kümmern, php erledigt dies alles (Anlegen der Datei, öffnen der Datei, Zuweisen der variablen an $_session) im Hintergrund für Dich. Wichtig ist einfach, dass die Session id in jeder Datei zur nächsten übergeben wird, falls nicht, kommst Du nicht mehr an die gespeicherten Daten ran.

Hoffe, diese Erklärung macht halbwegs Sinn... Wenn Du googelst, findest Du sicher einige Beispiele, wie man sessions anwenden kann.
 
Zuletzt bearbeitet:
Erstmal danke an alle, die ihre Zeit in diesem Thread gelassen haben.

Das "wofür" ist mir jetzt geläufig, wovon für mich wenn in erster Linie die "Verfolgung der besuchten Seiten" interessant gewesen wäre, um diese noch interessanter zu gestalten oder anderes von der HP zu schmeissen.

Da ich die Programmier-Technische Seite noch immer nicht raffe (keine Ahnung warum nicht :( ), werde ich das Thema "Sessions" wohl doch erstmal "auf Eis legen" bevor ich meinen PC dann doch irgendwann an die Wand quacke, weil ich total verzweifle :whacky:


mfg nwibs

P.S. Google hat zwar vieles drinnen, aber entweder ist es immer das selbe wie auf zig anderen Seiten auch, es stehen nur 3 Sätze da oder es handelt immer nur um "Login".
 
OK, dann hier ein einfaches Beispiel, welches zählt, wie oft die entsprechende Seite aufgerufen wird. (per Reload oder so) Standardmässig wird die SessionId in einem cookie gespeichert(ohne Gewähr) und übertragen.
:EDIT: Natürlich nur während einer Sitzung, wird das Browserfenster geschlossen, beginnts wieder bei null.

<?php
session_start();
if (!session_is_registered("count")) {
session_register ("count");
$_SESSION ["count"]=0;
} else $_SESSION["count"]++;
echo $_SESSION["count"];
?>


Zur Erklärung: session_start() schaut nach, ob die Id bereits existiert (als cookieresp. get Parameter übergeben wurde). Falls ja, wird die Datei mit der entspr. Id eingelesen. und die Variablen dem Array $_REQUEST resp. $_SESSION zugewiesen. Falls kein Cookie übergegeben wurde, wird eine neue Datei angelegt (deshalb ist es wichtig, auf JEDER Seite session_start(); einzubinden, sonst geht die session verloren). (dies passiert alles automatisch durch php, was das Verständnis evt. etwas erschweren kann).
session_is_registered() fragt nun ab, ob die Variable count bereits registriert worden ist. Falls nein, wird php gesagt, dass der Wert dieser Variable in der Datei gespeichert werden soll, sobald das Script beendet ist.
Falls die Variable bereits in der Datei aufgelistet ist, wird der Wert um eins erhöht.
Der Wert wird um eins erhöht und ausgegeben.
Das Script wird beendet, und alle registrierten session Variablen in die Datei geschrieben.

Alle Klarheiten beseitigt? :)
 
Zuletzt bearbeitet:
Umpf, eigendlich doch sehr einfach, so jetzt im nachhinein betrachtet :whacky:

Aber was ist, wenn jemand die Cookies deaktiviert hat? Dann kann (so verstehe ich es bisher zumindest) ja die SessionID nicht "hinterlegt" werden. Kann man das auch irgendwie händeln (übergabe der SessionID mit der URL??)?


mfg nwibs
 
PHP wertet zunächst die Cookies aus, um die sessionid zu finden, steht dort die sessionId nicht drin, werden die POST / GET Arrays durchsucht.

Ausserdem kann in der ini Datei gesteuert werden, ob php an alle Links die Session id anhängen soll. Das kann man aber auch manuell machen:

echo "<a href = "meineTolleSeite.php?".SID.">Meine tolle Seite </a>";

In der Konstante SID steht nämlich der String "SESSIONID=xxxxxxxxx"; wobei SESSIONID der Name ist, der in der php ini für die Session id festgelegt worden ist. Sind cookies aktiviert, dann ist SID leer.
Sind nun cookies deaktiviert, und der Nutzer klickt auf den Link, so findet PHP die Session id trotzdem, da ja auch im GET / POST Array nach der session Id gesucht wird.



Man kann dies auch über ein Formular erreichen, das auf allen Seiten eingebunden wird:
<form method="post">
<input type="hidden" name="<? echo session_name();?>" value="<? echo session_id();?>">
</form>

Wie der Name sagt, liefert session_name ebenfalls den Namen der Sessionvariablle, wie in der ini Datei festgelegt, und session_id den Wert.

Das Problem hier ist das folgende: Verlässt der Nutzer die Seite (klickt auf einen externen Link o.ä), und kehrt dann wieder zurück, auf die Seite, dann ist seine ID verloren, und die Session wird neu angelegt, und startet von vorne.
Bei Cookies ist dies nicht so tragisch, denn da muss das Browserfenster geschlossen werdne, damit sie gelöscht werden. (meine Aussage weiter oben, dass dann die session auch bei cookies verloren geht, war leider falsch, wie ich gerade durch ausprobieren herausgefunden habe :))
Deshalb sind cookies prinzipiell eine gute Idee, noch besser ist es, beide Varianten (SID an Links anhängen) zu berücksichtigen.
 
Zuletzt bearbeitet:
Soooo langsam aber sicher löst sich der Knoten im Kopf und ich fange an zu verstehen :grin:

Danke dir vielmals.


mfg nwibs
 
Mir fällt da gerade noch eine andere Frage ein (hat nix mit Sessions zu tun, aber wollte keinen neuen Thread aufmachen)... sicherlich auch wieder so eine Anfängerfrage, aber egal :rolleyes:

Ist es sinnvoll seine Texte für die Homepage in einer MySQL-DB zu speichern und von dort zu "importieren" (so wie es phpBB mit den Postings z.bsp. macht), oder ist sowas für eine normale Homepage unsinn (war im übrigen zu faul jetzt mal die Suche zu benutzen).


mfg nwibs
 
[]

Es ist vollkommen ok seine Homepagetexte in eine DB zu packen. Der Vorteil ist, dass das ganze halt sehr flexibel ist. Nebenbei ist dieses Prinzip bei fast jedem CMS anzutreffen, von daher, y not?
 
Moin,
stimmt, die CMS machen das auch so, da hatte ich garnicht dran gedacht :rolleyes:
Na dann werde ich das mal so machen.

mfg nwibs
 
Achja, noch zu den Sessions. Ich hatte grad ein ähnliches Problem mit dem Portieren der Sessions, was machen wenn der Client Cookies deaktiviert hat? Ein hidden Feld ist sehr unprofessionell und mein Webhoster hat enable_trans_id (automatisches anfügen der ID an URLS) deaktivert. Auch die SID immer anzuhängen ist stressig und daher habe ich mir dieses kleine Snippet gebastelt: Have fun:)
PHP:
<?php
if (isset($_GET['s'])) {
	session_id(strip_tags($_GET['s']));
}
session_start();
if (defined('SID')) {
	output_add_rewrite_var('s',session_id());
}
 
Ich habe das mit den Sessions auch noch nicht 100%ig verstanden. Wenn ich zb. ein Array an eine andere PHP-Seite übergeben möchte, dann speichere ich dies zb. so:
PHP:
$_SESSION['delete_array'][$i] = $delete_array;
in eine Session.

Ist dies eine kluge Möglichkeit um ein Array zwischen PHP-Seiten zu transferieren?

Natürlich muss man dann noch ein System finden, das alte Sessions wieder löschen kann.

Kann man einen Session-Eintrag einfach wieder löschen, zb. so:

PHP:
$_SESSION['delete_array'][$i] = '';

Und noch eine Schlussfrage: ist es zb. besser Formulardaten über ein hidden-Element oder dem $_SESSION-Element zu übergeben???
 
Zuletzt bearbeitet:
Zurück
Oben