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 04-03-2010, 10:40
TriphunEM
 Registrierter Benutzer
Links : Onlinestatus : TriphunEM ist offline
Registriert seit: Jun 2003
Beiträge: 549
TriphunEM ist zur Zeit noch ein unbeschriebenes Blatt
Standard sessions in mysql verwalten!

Hallo,

ich wollte eigentlich die Sessions in der Datenbank verwalten um das lästige weiterreichen der Session-Id in Cookies oder Url zu verhindern.

Ich hab mich in die Thematik eingelesen, und die Session-verwaltung so umgesetzt! Geht auch alles!

Allerdings sind die Abfragen, der Datenbank so was von langsam, das ich es so nicht einsetzen kann! Weiß jemand warum, habe ich vielleicht etwas nicht beachtet?

Ich setze das auch noch nicht produktiv sondern nur local auf einem Testsystem ein. Und die Verwaltung ist bei ein paar Session-Werten in DB trotzdem so etwas von langsam!

Hier mal einige auzüge aus meiner Klasse!

Zu erst mach im Konstrukt:
PHP-Code:
        session_set_save_handler(array(&$this,'session_open'),
                                 array(&
$this,'session_close'),
                                 array(&
$this,'session_read'),
                                 array(&
$this,'session_write'),
                                 array(&
$this,'session_destroy'),
                                 array(&
$this,'session_clean')
                                 );
        
register_shutdown_function('session_write_close');
        if (!
session_id()) {
            @
session_start();
        } 
jetzt die Funktionen:

PHP-Code:
    /**
     * Open the session
     */
    
public function session_open($strSavePath,$strSessionName) {
        if (
$this->mysql_connect()) {
            return 
true;
        }
        return 
false;
    }

    
/**
     * Close the session
     */
    
public function session_close() {
        return 
true;
    }

    
/**
     * Read the session
     */
    
public function session_read($strSessionId) {
        
$strSessionId mysql_real_escape_string($strSessionId);
        
$strSQLCmd "SELECT data FROM sessions WHERE sessionId='".$strSessionId."' LIMIT 1";
        if (
$arrSession $this->mysql_select($strSQLCmd)) {
            return 
$arrSession[0]['data'];
        }
        return 
'';
    }

    
/**
     * Write the session
     */
    
public function session_write($strSessionId,$strData) {
        
$intLifeTime ini_get('session.gc_maxlifetime')+time();
        
$strSQLCmd "REPLACE INTO sessions VALUES('".$strSessionId."',".$intLifeTime.",'".$strData."')";
        
//$strSQLCmd = "UPDATE sessions SET expires=".$intLifeTime.",data='".$strData."' WHERE sessionId='".$strSessionId."'";
        
if ($this->mysql_query($strSQLCmd)) {
            return 
true;
        }
        return 
false;
    }

    
/**
     * Destoroy the session
     */
    
public function session_destroy($strSessionId) {
        
$strSQLCmd "DELETE FROM sessions WHERE sessionId='".$strSessionId."'";
        if (
$this->mysql_query($strSQLCmd)) {
            return 
true;
        }
        return 
false;
    }

    
/**
     * Garbage Collector
     * @param int life time (sec.)
     * @return bool
     * @see session.gc_divisor      100
     * @see session.gc_maxlifetime 1440
     * @see session.gc_probability    1
     * @usage execution rate 1/100
     *        (session.gc_probability/session.gc_divisor)
     */
    
public function session_clean($intMax) {
        
$strSQLCmd "DELETE FROM sessions WHERE expires<".(time()-$intMax);
        if (
$this->mysql_query($strSQLCmd)) {
            return 
true;
        }
        return 
false;
    } 
Nach meinem Gefühl ist das REPLACE INTO das problem, was so lahmt!

Danke!

Geändert von TriphunEM (04-03-2010 um 10:42 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 04-03-2010, 11:14
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TriphunEM Beitrag anzeigen
ich wollte eigentlich die Sessions in der Datenbank verwalten um das lästige weiterreichen der Session-Id in Cookies oder Url zu verhindern.
Aha. Und wie übergibst du die Session ID sonst, wenn nicht in Cookies oder in der URL?
Mit Zitat antworten
  #3 (permalink)  
Alt 04-03-2010, 11:18
schmalle
  Ich Root, Du nix
Links : Onlinestatus : schmalle ist offline
Registriert seit: Jun 2001
Ort: Egelsbach FFM
Beiträge: 9.170
schmalle ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Aha. Und wie übergibst du die Session ID sonst, wenn nicht in Cookies oder in der URL?
würde mich auch mal interessieren
__________________
h.a.n.d.
Schmalle

http://impressed.by
http://blog.schmalenberger.it



Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
... nur ohne :-)
Mit Zitat antworten
  #4 (permalink)  
Alt 04-03-2010, 11:28
TriphunEM
 Registrierter Benutzer
Links : Onlinestatus : TriphunEM ist offline
Registriert seit: Jun 2003
Beiträge: 549
TriphunEM ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hab ich ja bisher so gemacht!
Aber da ich Url-Rewriting jetzt betreiben, hat die session-Id in der Url nix zu suchen. Und Cookies sind zu unsicher, da man diese im Browser deaktivieren kann!

Bitte zurück zu meiner Frage, danke! ;O)
Mit Zitat antworten
  #5 (permalink)  
Alt 04-03-2010, 11:31
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TriphunEM Beitrag anzeigen
Hab ich ja bisher so gemacht!
Aber da ich Url-Rewriting jetzt betreiben, hat die session-Id in der Url nix zu suchen. Und Cookies sind zu unsicher, da man diese im Browser deaktivieren kann!

Bitte zurück zu meiner Frage, danke! ;O)
Du hast die Frage immer noch nicht beantwortet, wie du die Session-ID übergeben willst. Was bringen dir Sessions in der Datenbank, wenn du sie nicht dem jeweiligen Benutzer zuordnen kannst?
Mit Zitat antworten
  #6 (permalink)  
Alt 04-03-2010, 11:50
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 TriphunEM Beitrag anzeigen
Nach meinem Gefühl ist das REPLACE INTO das problem, was so lahmt!
Gefühl? Wie wäre es mit Messen?!

Übrigens steht im Manual 'The "write" handler is not executed until after the output stream is closed', was bedeutet, dass der Output schon beim Client ist und der die Verzögerung durch REPLACE INTO gar nicht mehr mitbekommt.

Übrigens zielen die anderen beiden mit ihrer Frage darauf ab, woher $strSessionId bei session_read() kommt. Wenn du dich jetzt ans Messen und Debuggen machst, untersuche das mal mit - wirst dich wundern.
Mit Zitat antworten
  #7 (permalink)  
Alt 04-03-2010, 11:58
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Den Unsinn mit der SessionID haben dir die Anderen ja schon verkauft.
Fakt ist: Ohne, dass dir der Browser eine SessionID sendet wirst du niemals eine Session auf dem Server etablieren können.
Mit keiner Methode!

Aber zu deinem Handler:
Vergiss nicht das Sessionlocking zu implementieren. Sonst drohen "Race Conditions".
__________________
Wir werden alle sterben
Mit Zitat antworten
  #8 (permalink)  
Alt 04-03-2010, 12:11
TriphunEM
 Registrierter Benutzer
Links : Onlinestatus : TriphunEM ist offline
Registriert seit: Jun 2003
Beiträge: 549
TriphunEM ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hm, ich dachte durch die DB-Variante bräuchte ich keine Session-ID mit übergeben, da PHP den zusammenhang an hand der Client-Daten selber erkennt.

Wie kann ich die Session-ID noch weiterreichen, ohne url oder cookie...

selber an hand ip, browserinfos in einer db speichern???
Mit Zitat antworten
  #9 (permalink)  
Alt 04-03-2010, 12:14
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TriphunEM Beitrag anzeigen
hm, ich dachte durch die DB-Variante bräuchte ich keine Session-ID mit übergeben, da PHP den zusammenhang an hand der Client-Daten selber erkennt.

Wie kann ich die Session-ID noch weiterreichen, ohne url oder cookie...

selber an hand ip, browserinfos in einer db speichern???
Gar nicht. Weder IP noch Browserinfos sind eindeutig.
Mit Zitat antworten
  #10 (permalink)  
Alt 04-03-2010, 12:16
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

Was ist denn an einem Session Cookie so schlimm? Ohne Session Cookies kann man heutzutage gar nicht mehr vernünftig surfen und du kannst davon ausgehen, dass jeder Browser Session Cookies erlaubt.
Mit Zitat antworten
  #11 (permalink)  
Alt 04-03-2010, 12:20
TriphunEM
 Registrierter Benutzer
Links : Onlinestatus : TriphunEM ist offline
Registriert seit: Jun 2003
Beiträge: 549
TriphunEM ist zur Zeit noch ein unbeschriebenes Blatt
Standard

naja, solange man die ausschalten kann, hab ich ein schlechtes bauchgefühl...
Mit Zitat antworten
  #12 (permalink)  
Alt 04-03-2010, 12:23
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TriphunEM Beitrag anzeigen
naja, solange man die ausschalten kann, hab ich ein schlechtes bauchgefühl...
Dann musst du mit dem schlechten Bauchgefühl klar kommen. Es gibt einen Grund, warum PHP auf Cookies setzt. Aus Spaß hat sich das Niemand ausgedacht. Wenn man einen Browser auf einfache Art anders identifizieren könnte, würde das jeder so machen. Aber das ist nun mal nicht der Fall.
Mit Zitat antworten
  #13 (permalink)  
Alt 04-03-2010, 12:24
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

Wenn jemand Session Cookies nicht erlaubt, musst du die SID in der URL übertragen (Fallback). Anders geht es nicht.
Aber mal ehrlich, warum machst du dir diese Mühe? Hast du auf deiner Seite über längere Zeit getestet, wie viele User keine Session Cookies erlauben? Vermutlich nicht, denn dann hättest du erkannt, dass die Zahl derer gegen Null geht.
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL 4.1] "Wer ist online"-Liste verwalten tStein SQL / Datenbanken 10 09-05-2006 16:50
[MySQL 4.1] Verwalten großer Datenmengen Freiwild SQL / Datenbanken 5 22-06-2005 20:20
MySQL-Datenbank extern verwalten (evt. Access oder Server zu Hause) oelias SQL / Datenbanken 2 30-06-2004 21:11
Sessions mit PHP und Mysql sebchen PHP Developer Forum 2 02-06-2003 22:21
Verwalten von Usern in Sessions ... phil-bl PHP Developer Forum 22 09-04-2001 16:49

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 10:08 Uhr.