Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Session - mal will sie mal, will sie nicht [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Session - mal will sie mal, will sie nicht


 
Mr.Programe
27-10-2005, 16:21 
 
Hallo Zusammen, ich habe schon einiges hier zu Sessions gelesen aber leider noch nichts was auf mein Problem passt.

Ich schreibe an einer Seite die auch für Mobilegeräte geeignet sein soll und daher möchte ich auf Cookies verzischten. Das ganz steht auch soweit schon nur habe ich ein Problem. Wärend den ganzen Test auf meinem localen Server hatte ich
session.use_cookies off
gesetzt und dort läuft es Reibungslos über die SIDs die an die Url gehängt werden.
Auf dem Webserver (https://xantippe.cs.uni-sb.de/~fickert/login.php) ist session.use_cookies On und dort werden die SIDs halt nicht übergeben. Das ganz wäre ja auch kein Problem aber die Cookies funktionieren scheinbar auch nicht.

Bei mir funktioniert das einloggen mit hilfe von Cookies manchmal, aber ein paar bekannt hat es garnicht funktioniert.

Zur Zeit bin ich ziemlich ratlos, ich könnte vielleicht veranlassen das auf dem Server auch session.use_cookies off gesetzt wird, aber das ist ja nicht die optimale Lösung.

Hier mal die Variablen aus der php.ini (aus phpinfo kopiert)
session.use_cookies On
session.use_only_cookies Off
session.use_trans_sid On

Die Übergabe der Variablen im Loginscript:

if(isset($login_button))
{
session_start();
$_SESSION['login']=$login;
$_SESSION['pw']=md5($pw);
header("Location:index.php?".SID);
}


Mein Authorisierungskript:

function auth()
{
session_start();

$loginID=0;
$login_error=false; //für Fehlermeldungen

if(isset($_SESSION['pw']) || isset($_SESSION['login']))
{
$login_error=true;
$query=("SELECT id, interface_language FROM user WHERE login='".$_SESSION['login']."' AND pw='".$_SESSION['pw']."'");
$daten=mysql_query($query);
if($row = mysql_fetch_array($daten))
extract($row);
}

if($id!=0)
return array($id,$interface_language);
else
{
header("Location:login.php?login_error=$login_error");

return false;
}
}


Bei einem Misslungen Login werden aus debug gründen zur Zeit die Session variablen angezeigt. Der Login name wir angezeigt die Passwort variable ist scheinbar leer.

Sorry das ich hier Romane schreibe, aber ich weiss nicht wo ich bei dem Problem ansetzen soll.

Schon mal danke im Vorraus.

 
wahsaga
27-10-2005, 16:34 
 
Original geschrieben von Mr.Programe
Zur Zeit bin ich ziemlich ratlos, ich könnte vielleicht veranlassen das auf dem Server auch session.use_cookies off gesetzt wird, aber das ist ja nicht die optimale Lösung.
Warum nicht?
Damit hättest du eine definierte Umgebung, auf die du dich verlassen kannst.

header("Location:index.php?".SID);
1. zum x-tausendsten Mal: ein Location-Header erfordert zwingend einen absoluten URL inkl. Protokollangabe!
2. dir ist klar, dass die Konstante SID leer ist, wenn die Übergabe per Cookie geklappt hat?

 
Mr.Programe
27-10-2005, 17:12 
 
2. dir ist klar, dass die Konstante SID leer ist, wenn die Übergabe per Cookie geklappt hat?
hmm, ja... das ganze ist ja auch für die Cookie frei Version geschrieben

zum x-tausendsten Mal: ein Location-Header erfordert zwingend einen absoluten URL inkl. Protokollangabe!
habs sofort geändert, aber mit dem Session Problem hat es wohl nix zutun.

 
Wendel
27-10-2005, 19:46 
 
Moin,
also als erstes empfehle ich Dir für die Zukunft, Dir auf Deinem Webserver eine Entwicklungsumgebung einzurichten wie z.b.
entwicklung.deinSeitenname.de -> siehe Wahsage
Weil Deine Bekannten haben bestimmt nicht auf Deinem System Testanmeldungen durchgeführt. richtig?
Und dann Hast Du auch keine Systemumstellungsprobleme mehr!!!
Die können echt nerven.

Hast Du auf dem Webserver Zugriff auf das temp-Verzeichniss in dem die cookies gespeichert werden?
Wenn nicht, oder wenn das n neues Teil ist werden die Sessions im Ram gespeichert.
Dann kannst Du Dir mit
print_r($_SESSION);
mal anschauen was da drinnsteht und ob da überhaupt was drinnsteht.
Bzw. wann die Einträge verschwinden.
Ich rate Dir auf jeden Fall Dich für eine Version zu entscheiden!!!
EntwederCookies oder eben über die SessionID.

Noch was, wir hatten mal probleme mit selbstgesetzten cookies und dem IE. Sprich das Cookie Handling der Browser ist unterschiedlich!
Wie das mit Session Cookies aussieht, weis ich nicht aber:

Ich habe noch nie die SID mit übergeben und der Server wusste trotzdem immer auf welche Session er sich beziehen musste!!

Auf jeden Fall sieht Dein Code merkwürdig aus.
Ich habe gelernt als ERSTES session_start(); ohne leerzeichen oder sontwas davor.
Nicht innerhalb der Funktion, weil dann steht da nämlich was vor session_start()

Warum übergibst Du denn die Variablen nicht einfach mit POST?
Gibts da einen Grund für?
bzw. was passiert denn, wenn Du die Variablen einfach in die Session schreibst und auf der nächsten Seite ausliest?
Sind die dann weg?

Ich dachte immer die SID wird automatisch mit übergeben bzw. der Server macht das an der Verbindungskennung fest,
wer Du bist und so.

Wie gesagt: Ich mache das so:
session_start();
$_SESSION['bsp_var']=$beispielwert;
und auf der nächsten Seite:
session_start();
$Beispiel=$_SESSION['bsp_var'];

Und das geht ohne SID oder irgendwas anzugeben.
Ich glaube, wenn Da die cookies auf on gesetzt sind, dann speichert er die Werte in die Session_cookies
und wenn Du ihm dann die SID mit übergibst,
dann schaut er in der Session nach und da steht nix, weil der Server sagte er soll das im cookie speichern.
Folglich weis er irgendwann nicht mehr was er tun soll.
Mach doch einfach mal Deinen Header ohne SID und schau was kommt.

Ich mach jetzt erst mal Feierabend und schau später nochmal rein.

Grüße
Wendel

 
Abraxax
27-10-2005, 23:02 
 
wenn du das ding eh so geschrieben hast, dass es ohne cookies am besten läuft, solltest du wahsaga's vorschlag umsetzen.

einfach ein ... ini_set('session.use_cookies', 0); ... am anfang in deine datei(en) und fertig.

 
asp2php
27-10-2005, 23:16 
 
Original geschrieben von Mr.Programe

Die Übergabe der Variablen im Loginscript:

if(isset($login_button))
{
session_start();
$_SESSION['login']=$login;
$_SESSION['pw']=md5($pw);
header("Location:index.php?".SID);
}

woher kommt $login_button? von einer Form? wie hast du dann die Form-Element ausgelesen? $_POST? $_GET? register_globals =ON oder OFF?

 
jahlives
28-10-2005, 06:46 
 
Warum denn nicht Cookies oder Session ? Soll doch der User entscheiden was er will. Jedes session_start() probiert in deinem Falle ein Cookie zu setzen. Damit du aber sicher gehen kannst, dass das Cookie akzeptiert wurde, muss der User einen erneuten Request an die Seite schicken.
Also den User am Besten mittels eines Headers nochmal auf die gleiche Seite schicken und prüfen ob $_COOKIE['PHPSESSID'] gesetzt ist. Wenn nein dann akzeptiert der User keine Cookies und du machst einen erneuten Re-Direct, diesmal mit der SID angehängt.
Ausserdem würde ich beim ersten Start der Session (sprich wenn sich der User eingeloggt hat) eine Kontrollsessionvar speichern. z.B. $_SESSION['blabla'] = 'check'
Zur Authentifizierung des Users prüfst du neben dem Cookie resp SID eben noch ob $_SESSION['blabla'] gesetzt ist. Wird sie nicht sein, wenn auch nur ein Zeichen in der SID ned stimmt.

Gruss

tobi

p.s. UNBEDINGT index.php?strip_tags(SID) machen. Ansonsten bist du offen für Crossscript Angriffe

 
chrisphp
28-10-2005, 11:04 
 
gibts da eigentlich ne Möglichkeit das er mir die SID an jeden Link dranhängt oder muss ich meine 500 Links manuell bearbeiten?

 
asp2php
28-10-2005, 12:02 
 
ja, wenn der Provider mitmacht => http://www.php.net/session schau dir den Part: Passing the Session ID mal an und natürlich die Var. session.use_trans_id auch

 
chrisphp
28-10-2005, 12:04 
 
ok, danke.
insofern dürfte es kein problem werden weil ich mein eigener provider bin ;-)
nen eigenen server...

 
jahlives
28-10-2005, 12:08 
 
@asp2php
Wenn die session.use.trans als aktiv gesetzt wird, wie sieht es dann mit der Möglichkeit aus ein strip_tags(SID) zu machen ? Oder wird das bei dieser Einstellung automatisch gemacht ?
Wäre ja ansonsten ein ziemliches Risiko

Gruss

tobi

 
chrisphp
29-10-2005, 11:03 
 
ja, das mit den strip_tags() (bzw. frage von jahlives) würde mich auch interessieren...

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:33 Uhr.