php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 30-08-2006, 21:52
Dark^Listener
 Newbie
Links : Onlinestatus : Dark^Listener ist offline
Registriert seit: Apr 2006
Beiträge: 12
Dark^Listener ist zur Zeit noch ein unbeschriebenes Blatt
Standard Session weiternutzen

Habe das Problem, das ich meine seite jetzt auf php umgestellt habe, folglich mit sessions arbeite für die einzelnen unterseiten, von denen eine auch ein gästebuch(captcha), was ebenfalls mit sessions arbeitet, eine eigene funktion session_start() hat und im früheren frameset auch funktioniert hat.

jetzt bekomme ich die meldung session_error, den die session die das gästebuch starten will ist bereits gestartet.
Wie schreibe ich den gästebuchscript:
PHP-Code:


<?php

error_reporting
(E_ALL);
    
session_start();

    
$CAPTCHA_RandomText "";
    if (isset(
$_POST['txtCode'])){
    
$CAPTCHA_EnteredText $_POST['txtCode'];
    }
    if (isset(
$_SESSION['CAPTCHA_RndText'])) {
    
$CAPTCHA_RandomText $_SESSION['CAPTCHA_RndText'];
    }

    if (
$CAPTCHA_EnteredText == $CAPTCHA_RandomText)
    {
[...(
unwichter Code zum überrpüfen der angaben und eintragen des eintrag)...]

}
// Session unset und destroy
    
session_unset();
    
session_destroy();
?>


in einer captcha_img.php wird ebenfalls session_start() aufgerufen
so um, das er die vorhande session mit nutzt.?
Mit Zitat antworten
  #2 (permalink)  
Alt 30-08-2006, 22:06
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Session weiternutzen

Zitat:
Original geschrieben von Dark^Listener jetzt bekomme ich die meldung session_error, den die session die das gästebuch starten will ist bereits gestartet.
wie wärs denn, wenn du session_start() einfach aus dem gästebuchscript entfernst?
Mit Zitat antworten
  #3 (permalink)  
Alt 30-08-2006, 23:16
jhaase
 Banned
Links : Onlinestatus : jhaase ist offline
Registriert seit: Aug 2006
Beiträge: 121
jhaase ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich würde session_id() abfragen, weil session_start() seit php 4.x.x eine Fehlermeldung bringt, wenn 2x aufgerufen.

session_id() returns the session id for the current session or the empty string ("") if there is no current session (no current session id exists).

ausserdem würde ich mit session_destroy vorsichtig sein. Viel besser ist es, einfach die eigenen Variabeln in $_SESSION mit unset() zu löschen: unset($_SESSION['gb_variable']); oder gerade einen Unterarray für die gb-Variabeln zu machen und in $_SESSION einzutragen.

session_unset() sollte nicht verwendet werden iZsh mit $_SESSION.

Mir scheint, mit diesen Grundsätzen wird es funktionieren.
Mit Zitat antworten
  #4 (permalink)  
Alt 30-08-2006, 23:47
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
if(!session_id())
 
session_start(); 
das ist natürlich flexibler, falls er wieder auf ein frameset umstellt.
Mit Zitat antworten
  #5 (permalink)  
Alt 30-08-2006, 23:57
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von 3DMax
PHP-Code:
if(!session_id())
 
session_start(); 
das ist natürlich flexibler, falls er wieder auf ein frameset umstellt.
Das hat nun wirklich nix mit Frames zu tun.....
Mit "fremden" includes oder so, kann ich es verstehen..
(und ist auch richtig so)
Mit Zitat antworten
  #6 (permalink)  
Alt 31-08-2006, 00:22
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie
Das hat nun wirklich nix mit Frames zu tun.....
wieso nicht?
es kann doch in jedem frame eine eigene session laufen.
Mit Zitat antworten
  #7 (permalink)  
Alt 31-08-2006, 01:17
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Angenommen alle Frames werden vom dem selben Sever oder Website beliefert..

Wenn die SID per URL übergeben wird... dann ja... mag möglich sein..
Bei den Standard-Session-Cookie-Einstellungen gilt eine Session für alle Frames!

Aber das hat auch wiederrum absolut nix mit dem if-Konstukt zu tun...
Damit ist nur festzulegen, daß wirklich nur 1 mal session_start() pro Request ausgeführt wird!
(oder sollte ich mich da ganz fürchterlich vertun)

Geändert von combie (31-08-2006 um 01:35 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 31-08-2006, 01:49
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie Wenn die SID per URL übergeben wird... dann ja... mag möglich sein..
Bei den Standard-Session-Cookie-Einstellungen gilt eine Session für alle Frames!
ich behaupte mal das gegenteil, bin jetzt aber zu faul, das zu testen
im falle von session.use_trans_sid wird die sid automatisch an frame=src geklebt und session-cookies werden für jedes frame separat gesetzt.

Zitat:
Aber das hat auch wiederrum absolut nix mit dem if-Konstukt zu tun...
Damit ist nur festzulegen, daß wirklich nur 1 mal session_start() pro Request ausgeführt wird!
ja, genau bzw. auch pro frame, weil dann, meiner meinung nach, das session-cokkie nicht aktiv ist.

[edit]
die übertragung ist eigentlich egal - in jedem frame muss auf alle fälle session_start() erfolgen. werde das morgen vielleicht mal testen.

Geändert von 3DMax (31-08-2006 um 01:52 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 31-08-2006, 02:13
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
und session-cookies werden für jedes frame separat gesetzt.
Ebend nicht!
http://de2.php.net/manual/de/functio...rite-close.php
Sagt:
Zitat:
...... Bei der Verwendung von Framesets zusammen mit Sessions werden Sie merken, dass wegen dieser Sperrung ein Frame nach dem anderen geladen wird. Sie können die Zeit zum Laden aller Frames reduzieren, indem Sie die Session beenden, sobald alle Änderungen an den Session-Variablen durchgeführt sind.
Warum wohl?
Mit Zitat antworten
  #10 (permalink)  
Alt 31-08-2006, 02:25
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Warum wohl?
ich vermute mal, wenn in jedem frame die selbe session läuft (übergabe der sid im url).

Session State bei parallelen Browser-Frames und Fenstern:
Zitat:
Viele Browser, wie Microsoft Internet Explorer 4.x und 5.0, speichern einen temporären Cookie (wie den Session Cookie) im Speicher des Prozesses, der die Webseite gerade anzeigt. Bei einem Frameset wird jeder Frame von einem eigenen Prozeß verwaltet und daher hat auch jeder Frame seine eigenen temporären Cookies. So schickt auch der Webserver beim Aufruf mehrerer ASP Seiten im Frameset zu jeder ASP Seite einen eigenen Session Cookie mit und generiert für jede ASP Seite ein eigenes Session Objekt. Das ist der Grund dafür, daß man von einer ASP Seite des Framesets keinen Zugriff auf Session Variablen einer anderen ASP Seite des Framesets mehr hat. (Vergleiche auch MSDN Artikel "Session Variables Lost When ASP is Located in Frameset")
der artikel ist zwar nicht ganz aktuell und behandelt auch asp, aber die cookiebehandlung deckt sich mit meinen vorstellungen
Mit Zitat antworten
  #11 (permalink)  
Alt 31-08-2006, 04:04
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Ich habe das mal getestet..
SID per Cookie...
egal welcher Browser: IE, FF, Opera

frame.php:
PHP-Code:
<?php  
session_start
();  
echo 
session_id();  
?>


Bei einer frameset.html:
PHP-Code:
<frameset rows="50%,50%">
    <
frame src="frame.php" name="test1">
    <
frame src="frame.php" name="test2">
</
frameset
Kann es passieren(muss aber nicht) das in jedem Frame eine eigene Session gestartet wird!
Beim ersten Reload einigen sich dann aber alle Frames auf die gleiche SID!
Scheint ein "race condition" Problem zu sein...


Bei einer frameset.php:
PHP-Code:
<?php session_start() ?>
<frameset rows="50%,50%">
    <frame src="frame.php" name="test1">
    <frame src="frame.php" name="test2">
</frameset>
Wird sofort in allen Frames die gleiche Session gestartet!
IMMER!

Resumee:
Alle Frames teilen sich ein Cookie!
Bei konkurierenden Zugriffen gewinnt das zuletzt gesetzte!
Ja, ich muss zugeben, es gibt ein Session-Frame-Problem.
Es ist aber in den Griff zu bekommen...


Test:
http://www.combie.de/frametest/frameset.html
http://www.combie.de/frametest/frameset.php

Geändert von combie (31-08-2006 um 04:26 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 31-08-2006, 10:31
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von combie
Resumee:
Alle Frames teilen sich ein Cookie!
Bei konkurierenden Zugriffen gewinnt das zuletzt gesetzte!
Na klar, es ist nur ein Cookie - sofern der Cookie-Name nicht geändert wird (Script/Konfiguration).

Ist doch alles ganz und gar logisch ...

Wenn in Frame1 eine Session gestartet wird, sendet der Server einen Cookie mit.
Wird Frame2 angefordert, bevor die Antwort für Frame1 da ist, hat der Client noch kein Cookie zum mitsenden - also startet der Server eine neue Session, und sendet unter dem gleichen Cookie-Namen eine neue SID zurück - die jetzt die "alte" SID von Frame1 ersetzt.

So, sind jetzt alle Frames geladen, bleibt irgendeine der übermittelten SIDs übrig - und wird bei der nächsten Anfrage, egal für welchen Frame, vom Client wieder an den Server geschickt.
Und in der Antwort schickt der Server genau diese SID erneut im Cookie mit, jetzt "bleibt" sie also, egal für welchen Frame.


Den im von 3DMax verlinkten Artikel beschriebenen Effekt würde ich als Browserfehler bezeichnen wollen. Cookies gehören per Definition zur Domain (und ggf. Pfad), von der aus sie gesetzt wurden, und nicht zu irgendwelchen "Prozessen" - weder HTTP, noch der Server interessieren sich dafür, ob clientseitig irgendwelche "Prozesse" vorhanden sind.
Der Cookie ist mit jedem Request zu übermitteln, der innerhalb dieser Domain/Pfad-Umgebung lokalisiert ist.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #13 (permalink)  
Alt 31-08-2006, 12:30
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie
Resumee:
Alle Frames teilen sich ein Cookie!
ja, da muss ich dir recht geben. habs auch mal mit dem ie5 getestet, selbes verhalten
da lag ich wohl verkehrt.

Zitat:
Original geschrieben von wahsaga
Der Cookie ist mit jedem Request zu übermitteln, der innerhalb dieser Domain/Pfad-Umgebung lokalisiert ist.
aber bei zwei geöffneten browser-instanzen habe ich doch auch zwei unterschiedliche session-cokies/session-ids innerhalb der selben domain.
Mit Zitat antworten
  #14 (permalink)  
Alt 31-08-2006, 12:33
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von 3DMax
aber bei zwei geöffneten browser-instanzen habe ich doch auch zwei unterschiedliche session-cokies/session-ids innerhalb der selben domain.
Ja, zwei Browserinstanzen sind ja auch etwas vollkommen unabhängiges.

Aber Frames werden in einer Browserinstanz angezeigt - und ob da noch verschiedene "Prozesse" hinter liegen, ist mir wurscht :-)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #15 (permalink)  
Alt 31-08-2006, 14:38
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Habe das mal mit den 3 oben genannten Browsern getestet...

Nur der IE gönnt sich für jede Instanz ein eigenes Cookie. FF und Opera arbeiten in allen geöffneten Fenstern mit ein und demselben Cookie.

-----------
Besten Dank für die anregende Disskusion...
auch ich habe noch was dazugelernt

Wahrscheinlich werde ich Fragmente, aus dem hier gesagten, in mein mini Tutorial übernehmen.
http://www.technischedaten.de/pmwiki...essionHandling
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:43 Uhr.