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 21-09-2010, 22:42
waldgeist
 Registrierter Benutzer
Links : Onlinestatus : waldgeist ist offline
Registriert seit: Sep 2010
Beiträge: 8
waldgeist befindet sich auf einem aufstrebenden Ast
Post str_replace Problem

Hallo Leute,

habe das Forum / die Community hier grade zufällig bei meiner Suche gefunden und war mit den Antworten immer soweit zufrieden, daher dachte ich es wird mal Zeit für mich hier reinzuschauen. Daher an dieser Stelle ein freundliches Hallo :-).

Zu meinem Problem. (das mich inzwischen verzweifeln lässt )
Ich habe eine eigene Session Verwaltung. Diese beinhaltet eine Funktion, die eine Variable entweder hinzufügt oder - wenn bereits vorhanden - ersetzt. Das ganze läuft mittels str_replace() .

Soweit funktioniert das auch wunderbar. Regelmäßig kommt es jedoch zu Fehlern beim schreiben... Bisher ohne exaktes (von mir identifizierbares) Muster für den Fehler.

Was jedoch klar ist - es tritt quasi immer dann auf wenn ich die aktuelle Adresse als Session speichere. Also wenn z.B. die alte Variable durch die neue ersetzt werden soll:

Code:
old: #urlActiveEncode:from=http%3A%2F%2Fwameo-test-domain.dev%2Flist.php%3Fcatid%3D3#
new: #urlActiveEncode:from=http%3A%2F%2Fwameo-test-domain.dev%2F#
# ist dabei die Begrenzung
: die Trennung zwischen Variable (var) und Wert (value)

Rauskommen tut dabei dann z.B. sowas:
Code:
#urlActiveEncode:from=http%3A%2F%2Fdomain.dev%2F%3Fcc%3D1%26cc%3D1#cc=1&cc=1#cc=1#
Wobei die cc=1 eigentlich noch in die Variable mit reingehören würden. Eigentlich natürlich nur einmal. Das ganze ist ein Output nach mehrfachem Neuladen ...


Die Funktion dazu ist die folgende:
PHP-Code:
function sess_varUpdate($var,$value){
   global 
$sess_var;
   
$content file_get_contents("sessions/".$sess_var[sess_id].".info");

   
$string_old "#".$var.":".$sess_var[$var]."#";
   
$string_new "#".$var.":".$value."#";
   echo 
"old: ".$string_old."<br>new: ".$string_new."<br>";
   
$content str_replace($string_old,$string_new,$content);
   
//echo "Inhalt - ".$content."<br><br>";
   
$fp fopen("sessions/".$sess_var[sess_id].".info""r+");
   
rewind($fp);
   
fwrite($fp,$content);
   
fclose($fp);
   
$sess_var[$var] = $value;

Hat irgend jemand eine Idee, warum der Probleme dabei hat den alten durch den neuen zu ersetzen - und das obwohl nach dem exakten alten String in der Datei gesucht wird?

Ach ja. Das erste schreiben klappt auch immer problemlos. Sobald eine längere URL drinnen ist kommen die Probleme vor.


Ich habe auch schon versucht das ganze so weit umzuschreiben, dass die Infos nicht mehr wie aktuell in Reihe (also: #var1:value1#var2:value2#) sondern Zeilenweise geschrieben werden und dann nur die Zeile ersetzt werden muss. Aber auch das hat nicht zum Erfolg geführt.

Dabei kamen dann solche Dinge raus:
Code:
#urlActiveEncode:from=http%3A%2F%2Fwameo-test-domain.dev%2Fandrease.htm
c%3D1
D1
#count[106]:1
3D1
D1
#count[86]:1
Alle Einträge die nicht mit einer Raute beginnen sind falsch und gehören eigentlich zum Eintrag urlAtiveEncode


Wäre super wenn jemand eine Idee dazu hat...
Habt Dank und einen schönen Abend :-).

Viele Grüße,
Jonas
Mit Zitat antworten
  #2 (permalink)  
Alt 21-09-2010, 23: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

Zitat:
Ich habe eine eigene Session Verwaltung.
Ich kanns mir nicht verkneifen: Warum tust du sowas?
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 21-09-2010, 23:40
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Warum benutzt du nicht die in PHP eingebauten Session-Funktionen?
Mit Zitat antworten
  #4 (permalink)  
Alt 21-09-2010, 23:59
waldgeist
 Registrierter Benutzer
Links : Onlinestatus : waldgeist ist offline
Registriert seit: Sep 2010
Beiträge: 8
waldgeist befindet sich auf einem aufstrebenden Ast
Standard

Ich habe schon fest mit dieser Frage gerechnet :-).
Die Antwort ist recht einfach: Um eine Domainübergreifende Session Verwaltung zu realisieren.

Ne spontane Idee für das Problem hat aber nicht zufällig jemand ?
Mit Zitat antworten
  #5 (permalink)  
Alt 22-09-2010, 08:01
eagle275
 Registrierter Benutzer
Links : Onlinestatus : eagle275 ist offline
Registriert seit: Jun 2010
Beiträge: 403
eagle275 befindet sich auf einem aufstrebenden Ast
Standard

wenn du die Variable entweder hinzufügst oder ersetzt ..


dann würd ich das so realisieren

$variable=blabla

weil du die Variable in jedem Fall sowieso überschreibst ...

str_replace ersetzt "nur" dann den gesamten String, wenn er zufällig der Suchparameter ist

wenn du sowieso den gesamten String ersetzen willst, dann weise ihm einfach OHNE str_replace den neuen Wert zu und gut is

ich krieg bei deinem Globals gerad ne Gänsehaut .... warum gibt deine Funktion den Wert nicht per return zurück?
__________________

Wer LESEN kann, ist klar im Vorteil!

Geändert von eagle275 (22-09-2010 um 08:05 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 22-09-2010, 09:56
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von waldgeist Beitrag anzeigen
Ich habe schon fest mit dieser Frage gerechnet :-).
Die Antwort ist recht einfach: Um eine Domainübergreifende Session Verwaltung zu realisieren.

Ne spontane Idee für das Problem hat aber nicht zufällig jemand ?
Spontane Idee - lass' den Quatsch, dir selber irgendein Format zum Speichern der Daten zusammenzubasteln.

serialize und sein Gegenstück existieren.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 22-09-2010, 10:19
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

session_set_save_handler() existiert auch.
Mit Zitat antworten
  #8 (permalink)  
Alt 22-09-2010, 12:01
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:
Zitat von onemorenerd Beitrag anzeigen
session_set_save_handler() existiert auch.
Ist nicht wirklich hilfreich....
Die wenigsten bekommen bei einem eigenen Handler ein stabiles Sessionlocking hin.
Auch bei:
Zitat:
Um eine Domainübergreifende Session Verwaltung
hilft kein eigener Handler....
Denn das Problem sind die Cookies. Diese sind an die Domain gebunden.

Also hilft keine eigener Handler.
Auch hilft keine selbstgebaute Sessionverwaltung.
Und wenn es auch noch unterschiedliche Domaininhaber sind, wird die Unix Rechteverwaltung da auch noch einen dicken Strich durch die Rechnung machen. Denn die Session Dateien sollten nicht von jedem x beliebigen User gelesen werden dürfen.

Nix hilft da. (soweit ich das beurteilen kann)



Zitat:
Domainübergreifende Session Verwaltung
Was ist darunter zu verstehen?
Wenn es sich um Subdomains handelt, ist das im Sessioncookie einstellbar.
Wenn die Domains auf einem Server liegen könnte man versuchen die SID per Url zu übergeben. Aber das muss nicht gelingen(wg. Rechte, oder unterschiedlicher temp Verzeichnisse), und ist dazu noch relativ unsicher.
__________________
Wir werden alle sterben

Geändert von combie (22-09-2010 um 12:05 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 22-09-2010, 12:06
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Ist nicht wirklich hilfreich....
Die wenigsten bekommen bei einem eigenen Handler ein stabiles Sessionlocking hin.
Möglich ist es und bei Bedarf kann ich es ihm zeigen.
Seine Methode enthält übrigens auch kein Locking. Zwischen file_get_contents und fwrite kann viel passieren.
Mit Zitat antworten
  #10 (permalink)  
Alt 22-09-2010, 12:23
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:
Zwischen file_get_contents und fwrite kann viel passieren.
Ja, genau!
Darum habe ich das Locking ja auch erwähnt.

Aber egal ob eine völlig selbst geschriebene Session Verwaltung, oder nur ein eigener Handler. Ich sehe nicht wie das Problem zu lösen wäre, denn PHP ist ja weiterhin den selben Gesetzen und Regeln unterworfen.

Mich interessiert:
Wozu soll das überhaupt gut sein?

Weil bisher sehe ich nur, dass Sessions für irgendwas benutzt werden sollen, was sie nicht leisten können.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #11 (permalink)  
Alt 22-09-2010, 13:32
waldgeist
 Registrierter Benutzer
Links : Onlinestatus : waldgeist ist offline
Registriert seit: Sep 2010
Beiträge: 8
waldgeist befindet sich auf einem aufstrebenden Ast
Standard

Danke erstmal für die zahlreichen Antworten und die Diskussion.
Das ganze hat mich erst einmal ein bisschen weiter gebracht.

Ich werde mir mal serialize und unserialize genauer anschauen. Denke damit habe ich eine gute Möglichkeit die Informationen zu speichern.


Wozu das ganze. Wie gesagt. Ich habe ein Projekt bei dem es möglich sein muss auf die Daten von verschiedenen Domains zuzugreifen.
Die Cookie Problematik wurde bereits erläutert. Entsprechend muss ich die Session Daten irgend wo speichern.
Das ganze läuft auch - von den Problemen mal abgesehen. Wenn das ganze per serialize sinnvoll abgespeichert werden kann, dann sogar (bisher) einwandfrei.


Was genau ist das session locking? Ich nehme an das, was der Name sagt. Also der Schutz vor doppeltem beschreiben?
Diesen Schutz gibt es bei mir aktuell nicht. Wäre aber wohl drüber nachzudenken.


Was mich jetzt noch interessiert:
Zitat:
ich krieg bei deinem Globals gerad ne Gänsehaut ....
Wieso weshalb warum? Ich weiß - globals als mehr oder minder umstrittener Bereich. Aber das ganze etwas ausgeführt würde mich sehr freuen - lerne ja gerne dazu.


Das mit dem session_set_save_handler() hat mich leider auch nicht wirklich weiter gebracht. Finde die Dokumentation da äußerst dürftig. Was genau bringt mir das? In einer (MySQL-)Datenbank will ich es nicht speichern. Welche Möglichkeiten gibt es da? Und hat jemand einen guten Link zu einem ausführlichen Tutorial wo das ganze beschrieben wird (php.net mal ausgenommen)?
Mit Zitat antworten
  #12 (permalink)  
Alt 22-09-2010, 14:14
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von waldgeist Beitrag anzeigen
Die Cookie Problematik wurde bereits erläutert. Entsprechend muss ich die Session Daten irgend wo speichern.
Wo wurde das erläutert? Bisher hat combie nur gesagt
Zitat:
Wenn es sich um Subdomains handelt, ist das im Sessioncookie einstellbar.
Wenn die Domains auf einem Server liegen könnte man versuchen die SID per Url zu übergeben. Aber das muss nicht gelingen(wg. Rechte, oder unterschiedlicher temp Verzeichnisse), und ist dazu noch relativ unsicher.
Was ist nun? Sind deine Domains alle Subdomains einer gemeinsamen Hauptdomain? Dann setze das Session-Cookie für *.hauptdomain.tld und verwende PHPs Session-Mechanismus wie jeder andere auch. *

Sind es keine Subdomains? Dann erkläre uns doch bitte, wie du die SID überträgst. Mich interessiert vor allem, wie du es schaffst, dass ich mich auf Domain A einlogge, ein neues Tab im Browser öffne, zu Domain B gehe und dort bereits eingeloggt bin (Loginstatus aus Session, Session von A übernommen).

Unabhängig davon: Wie und wo speicherst du dann die Session-Daten, NFS? Dann musst du nur session.save_path dorthin zeigen lassen. *

*) Willst du Locking? Dann benutze zusätzlich session_set_save_handler().
Mit Zitat antworten
  #13 (permalink)  
Alt 22-09-2010, 14:19
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:
Zitat:
ich krieg bei deinem Globals gerad ne Gänsehaut ....
Wieso weshalb warum?
Die Verwendung globaler Variablen ermöglicht das auftreten von unerwünschten Seiteneffekten.
Darum sind sie zu recht verpönt.

In den heutigen OOP Zeiten gibt es keinen Grund mehr globale Variablen zu verwenden.

Zitat:
Wozu das ganze. Wie gesagt. Ich habe ein Projekt bei dem es möglich sein muss auf die Daten von verschiedenen Domains zuzugreifen.
Das hat nichts mit Sessions zu tun!
Das können sie nicht leisten.
Auch keine selbst gebauten.

Vermutlich sind SOAP oder REST die passenden Mittel um Daten über Domaingrenzen hinweg auszutauschen.
__________________
Wir werden alle sterben

Geändert von combie (22-09-2010 um 14:24 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 22-09-2010, 14:44
waldgeist
 Registrierter Benutzer
Links : Onlinestatus : waldgeist ist offline
Registriert seit: Sep 2010
Beiträge: 8
waldgeist befindet sich auf einem aufstrebenden Ast
Standard

@onemorenerd: Es handelt sich nicht um Subdomains. Dann hätte ich das ganze Problem ja nicht.

Wie läuft die Übertragung der Session:
Es gibt eine Hauptseite (domain1). Diese verwaltet die kompletten Sessions. Gehst du auf domain2 wird geschaut ob ein Cookie mit Session für domain2 existiert. Ist dies nicht der Fall wird eine Anfrage an domain1 gestellt. Über ein Token System mit zusätzlicher "Fingerprint" Überprüfung wird die ID als neuer Cookie gesetzt - womit domain2 auf die Session zugreifen kann.

@combie: Dann wäre es wohl mal an der Zeit für mich, sich ausführlich mit der objektorientierten Programmierung auseinander zu setzen. Bisher hatte ich mit globals allerdings noch keine Probleme. Noch dazu weil ich grundsätzlich nur arrays globalisiere die extra für diesen Zweck angelegt sind.
Probleme diesbezüglich hatte ich noch nie.
Mit Zitat antworten
  #15 (permalink)  
Alt 22-09-2010, 15:09
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von waldgeist Beitrag anzeigen
Es gibt eine Hauptseite (domain1). Diese verwaltet die kompletten Sessions. Gehst du auf domain2 wird geschaut ob ein Cookie mit Session für domain2 existiert. Ist dies nicht der Fall wird eine Anfrage an domain1 gestellt. Über ein Token System mit zusätzlicher "Fingerprint" Überprüfung wird die ID als neuer Cookie gesetzt - womit domain2 auf die Session zugreifen kann.
Dann ist also dieses Token das, was zwischen den Domains übergeben wird, um den Client identifizieren zu können ...?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
session-verwaltung, str_replace


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit str_replace() karpfen2005 PHP Developer Forum 9 09-09-2006 15:31
Problem mit str_replace() karpfen2005 PHP Developer Forum 2 25-08-2006 20:06
str_replace Problem! AciD-CoRe PHP Developer Forum 5 17-08-2006 17:10
Problem mit str_replace Arok PHP Developer Forum 2 08-08-2006 10:10
Problem mit PHP str_replace StarShaper PHP Developer Forum 4 05-08-2004 15:59

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 16:32 Uhr.