PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Session_IDs


Rudolfsport
12.03.2005, 19:21:43
kleine Frage dazu:

Ich kenne jetzt folgenden Befehl.

<?
session_start($sid);
?>

Ok aber ist dsa wirklich alles wie die berühmt berüchtigte Session_ID transportiert wird?
Wird mit obigen befehl eine ID erstellt, die dann solange erhalten bleibt wie der User auf bestimmten Seiten rumsurft durch einmaliges setzen oder muss ich es vom ersten aufruf ab auf jeder Seite setzen?
GEhört da am Ende des Scripts noch was dazu?

xabbuh
12.03.2005, 19:31:05
<?
session_start($sid);
?>
session_start() erwartet keinen Parameter. Richtig wäre:

<?php
session_start();
?>


Wird mit obigen befehl eine ID erstellt, die dann solange erhalten bleibt wie der User auf bestimmten Seiten rumsurft durch einmaliges setzen oder muss ich es vom ersten aufruf ab auf jeder Seite setzen?
Du musst auf jeder Seite, session_start() verwenden, damit die Sessionverwaltung die zuvor erstelle Sessionid wiederaufnehmen kann.

GEhört da am Ende des Scripts noch was dazu?
Wenn die Session gekillt werden soll, musst du dafür die Funktion session_destroy() und session_unset() benutzen.

Du solltest dir auch das entsprechende Kapitel im Tutorial durchlesen: http://tut.php-q.net/sessions.html

Rudolfsport
12.03.2005, 19:54:41
Muss ich es dann auch umschreiben, wenn ich soeinen Link habe:

<a href='snav.php'?SID=".session_id()." >

WEnn ja wie müsste das dann aussehen?

Dann noch ne Frage zu dem:

<?
session_start($sid);
?>

Ist das oben absolut falsch und kann in keinster Weise funktionieren? Also erstellt dieser befehl (ob ohne oder mit $sid) eine Session und leitet sie auch weiter.
Was ist hiermit:

<?php
session_start($SID);
if ($user[0] && $user[1]){
?>

Was bringt mir das? Wozu dient es denn?

header ("Location:snav.php?SID".session_id());

was ist das nun shcon wieder?

session_register("sponsor");

Hab ich noch gefunden, weiß aber auch nicht wozu ds gut sein soll.

Dann wenn ich jetzt einen Link mit logout machen würde, müsste das dann so aussehen:

<?
session_start();
session_destroy();
?>

Wäre jetzt anschließend zum eispiel bei einem Login Form so, dass der User bei Login eine komplet neue ID bekommt.

PS: Irgendwas stimmt mit dem Tutorial nicht, kennst du noch ein anderes? Google gibt nichts gescheites aus.

Rudolfsport
12.03.2005, 20:35:21
da das irgendwie zulang werden würde muss ich nen neuen Post machen:

<?php
if ($senden=="Login"){
$eingelogt=einloggen($login,$passwort);
$eingelogt=explode (";",$eingelogt);
if ($eingelogt[0]=="ja"){
$passwort=substr(md5($passwort),0,10);
session_start();
$user=array($eingelogt[1],$passwort);
session_register("user");
include ("zufall2.php");
}else{
include ("wronglogin.php");
}
}else{
session_start();
if ($user[0] && $user[1]){
$login=sess_login($user[0],$user[1]);
if ($login=="ja"){
include ("zufall2.php");
}else{
echo $login;
}
}
}
/*Funktionen
Member Login*/
function einloggen($nickname,$passwort){
$nickname=strip_tags(trim(strtolower($nickname)));
$passwort=strip_tags(trim($passwort));
$passwort=md5($passwort);
$passwort=substr($passwort,0,10);
//Tabelle durchsuchen nach Nickname und Passwort testen
if ($nickname){
if ($passwort){
include ("verbindung.php");
$SQL_member=mysql_query("SELECT * FROM spieler WHERE User_Name='$nickname'");
$mem_anz=mysql_num_fields($SQL_member);
$member=mysql_fetch_array($SQL_member,MYSQL_NUM);
if ($member[1]==$nickname){
if ($member[2]==$passwort){
if ($member[5]==0){
$ausgabe="<br><div class='ta_lireueber'>";
$ausgabe.="Anmeldung Fehlgeschlagen<br>";
$ausgabe.="<div style='background-color:#75baff;color:#ff0000;line-height:14pt;font-size:12pt;text-align:center;'>";
$ausgabe.="Sie haben Ihr Konto noch nicht aktiviert. Bitte ";
$ausgabe.="benutzen Sie dazu die Ihnen zugesandte e-Mail";
return ($ausgabe);
}elseif ($member[5]==2){
$ausgabe="<br><div class='ta_lireueber'>";
$ausgabe.="Anmeldung Fehlgeschlagen<br>";
$ausgabe.="<div style='background-color:#75baff;color:#ff0000;line-height:14pt;font-size:12pt;text-align:center;'>";
$ausgabe.="Ihr Konto wurde gesperrt. Bitte wenden Sie Sich ";
$ausgabe.="an den Administrator";
return $ausgabe;
}elseif ($member[5]==1){
return ("ja;".$member[0]);
}
}else{
$ausgabe="<br>";
$ausgabe.="Anmeldung Fehlgeschlagen<br>";
$ausgabe.="Falsches Passwort.";
return ($ausgabe);
}
}else{
$ausgabe="<br>";
$ausgabe.="Anmeldung Fehlgeschlagen<br>";
$ausgabe.="Dieser Namen ist in meiner Datenbank nicht vorhanden";
return ($ausgabe);
}
}else{
$ausgabe="<br>";
$ausgabe.="Anmeldung Fehlgeschlagen<br>";
$ausgabe.="Sie haben kein Passwort eingegeben";
return ($ausgabe);
}
}else{
$ausgabe="<br>";
$ausgabe.="Anmeldung Fehlgeschlagen<br>";
$ausgabe.="Sie haben keinen Nickname eingegeben";
return ($ausgabe);
}
}
//Session_login
function sess_login($user_id,$passwort){
include ("verbindung.php");
$spieler=mysql_fetch_array(mysql_query("SELECT * FROM spieler WHERE Spieler_ID='$user_id'"));
if ($user_id==$spieler[0] && $passwort==$spieler[2]){
if ($spieler[5]==0){
$ausgabe="<br>";
$ausgabe.="Anmeldung Fehlgeschlagen<br>";
$ausgabe.="Sie haben Ihr Konto noch nicht aktiviert. Bitte ";
$ausgabe.="benutzen Sie dazu die Ihnen zugesandte e-Mail";
return ($ausgabe);
}elseif ($spieler[5]==2){
$ausgabe="<br>";
$ausgabe.="Anmeldung Fehlgeschlagen<br>";
$ausgabe.="Ihr Konto wurde gesperrt. Bitte wenden Sie Sich ";
$ausgabe.="an den Administrator";
return $ausgabe;
}elseif ($spieler[5]==1){
return ("ja");
}
}else{
$ausgabe="<br>";
$ausgabe.="Anmeldung Fehlgeschlagen<br>";
return ($ausgabe);
}
}
?>

Hab mir da mal was zusammen geschustert. Es sollte eigentlich eine Session_ID entstehen, das ist die Erste DAtei nach dem Login, also sollte sie hier entstehen, die Session_ID und jetzt wollte ich mal wissen ob das so richtig ist.
Und was ich dann auf den nachfolgenden Seiten schreiben muss. DAmit die Session_id übergeben wird

xabbuh
12.03.2005, 21:22:40
Muss ich es dann auch umschreiben, wenn ich soeinen Link habe:

<a href='snav.php'?SID=".session_id()." >
Besser ist es, die Sessionid mit Hilfe der Konstanten SID zu übergeben:
Anstatt die Session-ID mit session_name und session_id zu übergeben gibt es bei Sessions eine Konstante SID. Sie enthält beim starten der Session den String sessionname=sessionid, eignet sich also hervorragend um mit & an die URL angehängt zu werden. Wird die Session-ID mit Cookies übergeben sorgt session_start() dafür dass die Konstante leer ist. Man braucht die Session-ID ja nur einmal übergeben, nicht doppelt mit Cookies und mit der URL
-> http://tut.php-q.net/sessions.html

WEnn ja wie müsste das dann aussehen?

<?php
echo "<a href='snav.php?" . SID . ">";
?>


Dann noch ne Frage zu dem:

<?
session_start($sid);
?>

Ist das oben absolut falsch und kann in keinster Weise funktionieren?
Gegenfrage: Warum willst du einer Funktion einen Parameter übergeben, die keinen erwartet?

Was ist hiermit:
<?php
session_start($SID);
if ($user[0] && $user[1]){
?>
Was bringt mir das? Wozu dient es denn?
Wo hast du das denn her?

header ("Location:snav.php?SID".session_id());

was ist das nun shcon wieder?
Was genau verstehst du daran nicht?

session_register("sponsor");
Hab ich noch gefunden, weiß aber auch nicht wozu ds gut sein soll.
Die Funktion session_register() wurde vor der Einführung der superglobalen Arrays in PHP verwendet, um Variablen in einer Session zu speichern. Diese Funktion ist mittlerweile veraltet. Stattdessen speichert man die Werte in dem superglobalen Array $_SESSION ab:

<?php
$_SESSION['sponsor'] = 'irgendwas';
?>


Dann wenn ich jetzt einen Link mit logout machen würde, müsste das dann so aussehen:

<?
session_start();
session_destroy();
?>
Im Prinzip wäre es so richtig:

<?php
session_start();
session_unset();
if(isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
?>


Wäre jetzt anschließend zum eispiel bei einem Login Form so, dass der User bei Login eine komplet neue ID bekommt.
Nein, die Sessionid hat absolut nichts mit irgendwelchen ids in einer Datenbank zu tun.

PS: Irgendwas stimmt mit dem Tutorial nicht, kennst du noch ein anderes?
Vielleicht war das Tutorial zwischenzeitlich nicht erreichbar.

Rudolfsport
12.03.2005, 22:48:28
1.)
<?php
session_start();
if ($user[0] && $user[1]){
?>
Wo hast du das denn her?

2.)
header ("Location:snav.php?SID".session_id());
Was genau verstehst du daran nicht?


1.)
Das habe ich im internet gefunden.

2.)
Wofür das gut sein soll und wo ich es setze

DAnn habe ich noch dashier gefunden:

if (!session_is_registered('username'))

Wofür nimmt man das? Und wann setze ich es?

edgedeye
13.03.2005, 07:52:10
if (!session_is_registered('username'))


Wofür nimmt man das? Und wann setze ich es?

das kommt auf alle zu schützenden seiten. da wird abgefragt ob der benutzer angemeldet ist. wenn nicht, dann kann er sich die seite nicht ansehen. also:


<?session_start();
if (!session_is_registered('username'))
{
die ("Sie müssen sich anmelden!!");
}
?>

xabbuh
13.03.2005, 11:47:44
Das habe ich im internet gefunden.
Vergiss die Seite am besten so schnell wie möglich und schau dir stattdessen das Sessionskapitel im Tutorial (http://www.php.net/sessions.html) an.



<?php
header ("Location:snav.php?SID".session_id());
?>

Wofür das gut sein soll und wo ich es setze

Das ist eine simple Weiterleitung. Allerdings muss bei Weiterleitungen die Sessionid mit übergeben werden. Richtig würde das aber so aussehen:

<?php
header('Location: snav.php?' . SID);
?>


if (!session_is_registered('username'))
Wofür nimmt man das? Und wann setze ich es?
session_is_registered() hat man vor der Einführung der superglobalen Arrays benutzt, um zu prüfen, ob eine Variable in der Session vorhanden war. Diese Schreibweise ist alerdings veraltet. Jetzt sieht die Überprüfung so aus:

<?php
if(isset($_SESSION['username']))
?>

Rudolfsport
13.03.2005, 14:16:16
Ist es also richtig, dass ic hwo ich bisher

<?php
session_start();
if ($user[0] && $user[1]){
include ("verbindung.php");
?>

hatte, jetzt

<?php
session_start();
if (!session_is_registered('username'))
{
die ("Bitte logge dich ein.");
}
?>

hinschreiben muss?

Und was mach ich wenn $user[0] und $user[1] untem im script nochmal gebracuht werden?
Wird das dann einfach mit der if (!session_is_registered('username')) übertragen? Und kommt dieses session_is_registered mit der session_start immer ganz am Anfang vom Script oder am Schluß?

Dann habe ich noch so einen Link/Button gefunden
echo "<input type='hidden' name='SID' value='".session_id()."'>";

Muss ich den auch umändern?

Kommt in einem Formular dann auch der Link mit der Variablen oder nicht?
Und dann habe ich noch das hier:

<?php
session_start();
include ("verbindung.php");
$fahrer=mysql_fetch_array(mysql_query("SELECT * FROM spieler WHERE Spieler_ID='$user[0]'"));
if ($fahrer[vertrag]!=0){
$vertrag=$fahrer[xxxx];
$sponsor=$fahrer[sponsor];
session_register("xxxx");
session_register("yyy");
header('Location: snav.php?' . SID);
}else{
?>
Wollte wissen ob das richtig ist.

xabbuh
13.03.2005, 14:58:48
Ist es also richtig, dass ic h [...] jetzt

<?php
session_start();
if (!session_is_registered('username'))
{
die ("Bitte logge dich ein.");
}
?>

hinschreiben muss?
Nein. Du sollst session_is_registered() und session_register() nicht verwenden. Stattdessen sollst die Variablen in dem $_SESSION-Array speichern und mit isset() überprüfen, ob die Werte in der Session vorhanden sind:

<?php
if(!isset($_SESSION['username'])) {
die('Bitte logge dich ein.');
}
?>


Dann habe ich noch so einen Link/Button gefunden
echo "<input type='hidden' name='SID' value='".session_id()."'>";
Dieses versteckte Eingabefeld benötigst du nur, wenn session.use_trans_sid in der php.ini nicht aktiviert ist, da es ansonsten automatisch von PHP erstellt wird, wenn es benötigt wird, sprich wenn das Sessioncookie nicht gesetzt werden konnte. Wenn session.use_trans_sid bei dir nicht aktiviert ist, sollte der Code so aussehen:

<?php
if(!isset($_COOKIE[session_name()])) {
echo '<input type="hidden" name="' . session_name() . '" value="' . session_id() . '">';
}
?>


Kommt in einem Formular dann auch der Link mit der Variablen oder nicht?
Was für einen Link meinst du?

Und dann habe ich noch das hier: [...] Wollte wissen ob das richtig ist.
Nicht ganz, da du ja auf session_register() verzichten sollst. Richtig wäre:

<?php
$_SESSION['xxxx'] = 'Wert der Variablen $xxxx';
$_SESSION['yyy'] = 'Wert der Variablen $yyy';
?>


Hast du dir denn jetzt mal das entsprechende Kapitel im Tutorial durchgelesen?

Rudolfsport
13.03.2005, 15:19:22
Aber das session_start mus schon noch davor. Oder?

<?php
sessio_start();
if(!isset($_SESSION['username'])) {
die('Bitte logge dich ein.');
}
?>

Und wenn es aktiviert ist, dann kann ich es löschen oder muss es dran lassen?

Damit meine ich zum beispiel dies:

<form action="xxx" usw.

Muss da wo "xxx" steht dann ".SID." stehen?

Wäre es so richtig:

<?php
session_start();
include ("verbindung.php");
$fahrer=mysql_fetch_array(mysql_query("SELECT * FROM spieler WHERE Spieler_ID='$user[0]'"));
if ($fahrer[vertrag]!=0){
$vertrag=$fahrer[vertrag];
$sponsor=$fahrer[sponsor];
$_SESSION("vertrag");
$_SESSION("sponsor");
header('Location: snav.php?' . SID);
}else{
?>

In dem Sessionkapitel des Tutorials steht nichts was mich klüger machen würde und das andere hab ich shcon durch aber ich kann ledier keinen bezug zu hiesiger situation finden.
Eben außer dem, dass man statt session_regist $_SESSION[].

|Coding
13.03.2005, 15:26:43
gerade die sache mit sessions ist eine geschichte, die nicht sooo einfach ist. ich würde dir raten überhaupt mal zu versuchen, das zuverstehen, was die leute hier die sagen wollen. es geht nicht, das du hier immer und immer wieder deine scripte postest, bis sie dir jemand zur funktion gebracht hat. wir wollen dir hier nur eine hilfestellung bieten, wenn du bei einem problem nicht weiter kommst, es kann aber nicht angehen, dass wir hier ne bastelstunde abhalten...

xabbuh
13.03.2005, 15:30:04
Aber das session_start mus schon noch davor. Oder?
Ja, session_start() gehört an den Anfang jeder Datei.

Und wenn es aktiviert ist, dann kann ich es löschen oder muss es dran lassen?
Wenn was aktiviert ist? Was möchtest du dann drin lassen?

Damit meine ich zum beispiel dies:

<form action="xxx" usw.

Muss da wo "xxx" steht dann ".SID." stehen?
Nein, im action-Attribut steht auch weiterhin die Adresse, an die das Formular gesendet werden soll. Man fügt eben nur noch ein verstecktes Eingabefeld hinzu, wie ich es dir in meinem vorigen Beitrag gezeigt hatte, falls session.use_trans_sid nicht aktiviert ist.

Wäre es so richtig:

<?php
session_start();
// [...]
$_SESSION("vertrag");
$_SESSION("sponsor");
?>
Nein, $_SESSION ist ein Array und dementsprechend muss es auch behandelt werden:

<?php
$_SESSIoN['vertrag'] = 'irgendwas';
$_SESSION['sponsor'] = 'irgendwas anderes';
?>

Rudolfsport
13.03.2005, 15:31:52
dsa hat sich auf den Link mit dem Forumlar bezogen mit dem drinnen lassen.
Dann kapier ich jetzt nicht was in irgendwas kommen soll.
Wenn ich jetzt das neue:

$_SESSION['vertrag'] = 'xxx';
$_SESSION['sponsor'] = 'yyy';

mit dem alten vergleiche:

session_register("xxx");
session_register("yyy");

Dann muss doch das xxx im unteren dem xxx im oberen entsprechen und das selbe mit dem yyy.
Lauf ich dann richtig wenn ich meine dass wenn xxx = vertrag wäre der code so wäre:

$_SESSION['vertrag'] = 'vertrag';

So danke, habt mir trotzdem sehr vie lweiter geholfen, auf euch ist eben immer verlass.

Rudolfsport
13.03.2005, 16:23:12
DELETED

|Coding
13.03.2005, 16:27:08
jetzt reichts aber mal!
probier dein script aus, ist alles richtig, dann wird es auch laufen. ist etwas nicht richtig, wirds halt nicht laufen!

Rudolfsport
13.03.2005, 16:48:35
da ist ja ds problem wenn ich wüsste warum diese verdammte session nicht in der browserzeile angezeigt wird:

http://www.seite.de/snav.php?

Danach kommt einfahc ncihts mehr und warum kann ich mir veradmmt nohcmal nciht erklären.

xabbuh
13.03.2005, 16:51:04
Ich hatte dir die Lektüre von http://tut.php-q.net/sessions.html empfohlen:

Anstatt die Session-ID mit session_name und session_id zu übergeben gibt es bei Sessions eine Konstante SID. Sie enthält beim starten der Session den String sessionname=sessionid, eignet sich also hervorragend um mit & an die URL angehängt zu werden. Wird die Session-ID mit Cookies übergeben sorgt session_start() dafür dass die Konstante leer ist. Man braucht die Session-ID ja nur einmal übergeben, nicht doppelt mit Cookies und mit der URL.

|Coding
13.03.2005, 16:58:50
da ist ja ds problem wenn ich wüsste warum diese verdammte session nicht in der browserzeile angezeigt wird:

http://www.seite.de/snav.php?

Danach kommt einfahc ncihts mehr und warum kann ich mir veradmmt nohcmal nciht erklären.
das kommt davon, und nur davon, weil du einfach nicht das versuchst zu verstehen, was wir dir hier sagen. kein wunder, das du dann beispielsweise ein array wie ein funktion benutzt.

Rudolfsport
13.03.2005, 19:01:43
hi,
habe da mal nen Codeschnipsel gefunden:

echo "<a href="index.php?".session_name()."=".session_id()."">test</a>n";
echo "<input type="hidden" name="".session_name()."" value="".session_id()."" />n";
setcookie(session_name(), session_id(), time()+3600);

Kann mir jemand dsa Script erklären? Das Tutorial tut das nicht wirklich gut.
Denn die ID fügt es an nur "Bitte logge dich ein" zeigt es immernoch an.

meikel (†)
13.03.2005, 19:05:14
hi,
habe da mal nen Codeschnipsel gefunden:

echo "<a href="index.php?".session_name()."=".session_id()."">test</a>n";
echo "<input type="hidden" name="".session_name()."" value="".session_id()."" />n";
setcookie(session_name(), session_id(), time()+3600);
Kann mir jemand dsa Script erklären?
Warum sollte man Scripte erklären, die nicht funktionieren?
Vor setcookie() wird schon Content ausgegeben...

Rudolfsport
13.03.2005, 19:31:57
also die ID hängts ja dran, also kann das sofalsch nciht sein. Verstehe es aber trotzdem nicht, auch wenn ich den text 10mal durhclese

|Coding
13.03.2005, 19:40:04
dann fang erst mal mit den grundlagen von php an.

meikel (†)
13.03.2005, 21:11:37
also die ID hängts ja dran, also kann das sofalsch nciht sein. Verstehe es aber trotzdem nicht, auch wenn ich den text 10mal durhclese
Du verstehst nicht nur das Script nicht, meinen Text willst Du auch nicht begreifen.

setcookie() definiert ein mit den HTTP Header-Informationen zu übertragendes Cookie. Wie andere Header auch, müssen Cookies vor irgendwelchen anderen Ausgaben Ihres Skriptes gesendet werden (dies ist eine Einschränkung des Protokolls). Sie müssen deshalb solche Funktionsaufrufe vor irgendwelchen Ausgaben, inklusive <html>- oder <head>-Tags sowie irgendwelcher Whitespaces tätigen. Erfolgte bereits vor dem Aufruf dieser Funktion eine Ausgabe erfolgt sein, gibt setcookie() scheitern und FALSE zurückgeben. War setcookie() erfolgreich, wird TRUE zurückgegeben. Dies sagt jedoch nichts darüber aus, ob der Benutzer das Cookie auch akzeptiert hat.

Dein PHP Schnipsel taugt bestenfalls als Beispiel dafür, wie es nicht gemacht werden soll.