turk porno porno escort rokettube
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 20 von 27

Thema: Identity ist ständig weg

  1. #1
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard Identity ist ständig weg

    Hallo,

    ich verwende Zend_Auth.
    Login/Logout klappt , auch kann ich in verschiedenen Controllern prüfen, ob eine Identity vorhanden ist.

    Aber wenn ich mal zwischendurch eine Pause einlege, d.h. mal für eine Minute keinen Aufruf an den Server schicke, dann bekomme ich plötzlich keinen Zugang mehr und muss mich wieder neu anmelden.

    Wie kann ich sowas untersuchen?

    Mein Login mache ich so:
    PHP-Code:
    public function loginAction()
        {
            
    $loginname null;
            
    $loginpassword null;
            
            
            if (
    Zend_Auth::getInstance()->hasIdentity()) {
                
    $this->_redirect('index''index');
            }
            
    $request $this->getRequest();
            
    // how did user get here? posted password or not?
             
    $form = new Form_LoginForm();
            if (
    $request->isPost()){
                if (
    $form->isValid($this->_request->getPost())) {
                    
    // hold valid data
                    
    $loginname $form->getValue('loginname');
                    
    $loginpassword $form->getValue('loginpassword');
                    
                    
    $authAdapter $this->getAuthAdapter(); 
                    
                    
    $authAdapter
                    
    ->setIdentity($loginname)
                    ->
    setCredential($loginpassword);
                    
    $auth Zend_Auth::getInstance();
                    
                    try
                    {
                        
    $result $auth->authenticate($authAdapter);
                        
    $this->logger->debug("Identity: " $result->getIdentity());
                        if (
    $result->isValid()) {
                            
    $this->logger->info("Authentication OK, stored!");
                            
    // success : store database row to auth's storage system
                            
    $identity $authAdapter->getResultRowObject(null'password');
                            
    // grab the user and store it into the auth's storage
                            
    $auth->getStorage()->write($identity);
                            return 
    $this->_helper->redirector('index','index');
                        } else {
                            
    $this->view->message 'Login failed.';
                        }
                    }
                    catch (
    Exception $e)
                    {
                        
    $this->logger->error('Caught exception: ',  $e->getMessage());
                    }
                } 
    // isValid            
            
    }
            
            
    // get an authAdapter we have prepared  in a separate function
             
    $authAdapter $this->getAuthAdapter();
             
    $this->view->form $form

     
        } 

    In die init-Funktionen der Controller habe ich das eingebaut:

    PHP-Code:
            if ((Zend_Auth::getInstance()->hasIdentity()) == FALSE) {
                
    // yet logged in, redirect him
                
    $this->_helper->redirector('notauthenticated''error');
                
    $this->logger->debug("----> not logged in");
            } 

    Wie kann ich die Dauer der Sessions definieren?
    Kann ich mir irgendwie ansehen, wie lange mein Benutzer noch angemeldet bleibt?
    Hat jemand irgendeinen Vorschlag, wie ich dieses seltsame Verhalten untersuchen kann?

  2. #2
    Erfahrener Benutzer
    Registriert seit
    12.03.2010
    Ort
    Gersthofen/Augsburg
    Beiträge
    424
    Thanks
    22
    Thanked 30 Times in 20 Posts

    Standard

    Schau mal in die php.ini wie lange die session-lifetime eingestellt ist.
    Nichts ist so hart wie das Leben!

    http://www.rootprogger.de

  3. The Following User Says Thank You to KnechtRootRecht For This Useful Post:

    -iis- (20.09.2012)

  4. #3
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    Hallo,
    das nenne ich mal eine schnelle Antwort !

    Also, ich habe jetzt das cookie im filesystem beobachtet: Die Session wird eingetragen und verschwindet plötzlich auch wieder wie von Geisterhand.

    Ist das vielleicht das Problem:
    session.gc_maxlifetime = 1440
    ?

    Allerdings habe ich in der application.ini die Lebenszeit explizit höher gesetzt:
    ; session
    resources.session.save_path = APPLICATION_PATH "/../data/session/"
    resources.session.gc_maxlifetime = 86400
    resources.session.remember_me_seconds = 86400

    [Session]
    ; Handler used to store/retrieve data.
    session.save_handler = files

    ; Argument passed to save_handler. In the case of files, this is the path
    ; where data files are stored. Note: Windows users have to change this
    ; variable in order to use PHP's session functions.
    ;
    ; As of PHP 4.0.1, you can define the path as:
    ;
    ; session.save_path = "N;/path"
    ;
    ; where N is an integer. Instead of storing all the session files in
    ; /path, what this will do is use subdirectories N-levels deep, and
    ; store the session data in those directories. This is useful if you
    ; or your OS have problems with lots of files in one directory, and is
    ; a more efficient layout for servers that handle lots of sessions.
    ;
    ; NOTE 1: PHP will not create this directory structure automatically.
    ; You can use the script in the ext/session dir for that purpose.
    ; NOTE 2: See the section on garbage collection below if you choose to
    ; use subdirectories for session storage
    ;
    ; The file storage module creates files using mode 600 by default.
    ; You can change that by using
    ;
    ; session.save_path = "N;MODE;/path"
    ;
    ; where MODE is the octal representation of the mode. Note that this
    ; does not overwrite the process's umask.
    ;session.save_path = "/tmp"

    ; Whether to use cookies.
    session.use_cookies = 1

    ; This option enables administrators to make their users invulnerable to
    ; attacks which involve passing session ids in URLs; defaults to 0.
    ; session.use_only_cookies = 1

    ; Name of the session (used as cookie name).
    session.name = PHPSESSID

    ; Initialize session on request startup.
    session.auto_start = 0

    ; Lifetime in seconds of cookie or, if 0, until browser is restarted.
    session.cookie_lifetime = 0

    ; The path for which the cookie is valid.
    session.cookie_path = /

    ; The domain for which the cookie is valid.
    session.cookie_domain =

    ; Handler used to serialize data. php is the standard serializer of PHP.
    session.serialize_handler = php

    ; Define the probability that the 'garbage collection' process is started
    ; on every session initialization.
    ; The probability is calculated by using gc_probability/gc_divisor,
    ; e.g. 1/100 means there is a 1% chance that the GC process starts
    ; on each request.

    session.gc_probability = 1
    session.gc_divisor = 1000

    ; After this number of seconds, stored data will be seen as 'garbage' and
    ; cleaned up by the garbage collection process.
    session.gc_maxlifetime = 1440

  5. #4
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    __ZF|a:2:{s:14:"FlashMessenger";a:1:{s:4:"ENNH";i: 1;}s:9:"Zend_Auth";a:1:{s:3:"ENT";i:1348135882;}}F lashMessenger|a:1:{s:7:"default";a:1:{i:0;a:1:{s:7 :"success";s:25:"The update was successful";}}}Zend_Auth|a:1:{s:7:"storage";O:8:"s tdClass":7:{s:2:"id";i:90003;s:7:"surname";s:9:"vo m Stein";s:7:"prename";s:7:"Susanne";s:5:"email";s:1 1:"svs@iis.net";s:5:"login";s:7:"Susanne";s:4:"rol e";s:13:"administrator";s:4:"site";s:7:"Berlin" ;}}
    Wie kann man so ein Cookie lesen? Steht da die Lebenszeit irgendwo drin?

  6. #5
    Erfahrener Benutzer
    Registriert seit
    10.09.2007
    Ort
    Wuppertal
    Beiträge
    5.725
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    Deine Sessiondaten werden nach 24 Minuten gelöscht, d.h. nach 24 Minuten ohne Request wird deine Session verworfen.

    Wenn die Session schneller verloren geht würde ich darauf tippen, dass ...
    * irgendwo die Session nicht initialisiert wird und sie daher "weg" ist
    * die Session explizit gelöscht wird im Code

    Kannst du dir mal in einem Cotroller oder Frontcontroller Plugin ausgeben lassen, was bei ini_get('session.gc_maxlifetime') ausgegeben wird? Kannst du bitte auch schauen, ob der BRowser die SessionID auch immer im HTTP Header mitschickt? Ist ein Proxy bei deinem Setup im Einsatz oder wird die Verbindung direkt zwischen Browser und IIS aufgebaut?
    Neues Projekt: zandman.de - Status: WIP




  7. #6
    Erfahrener Benutzer
    Registriert seit
    12.03.2010
    Ort
    Gersthofen/Augsburg
    Beiträge
    424
    Thanks
    22
    Thanked 30 Times in 20 Posts

    Standard

    Dein Cookie ist ausserdem ein serialisierter String.
    Mit unserialize() kannst du dir den inhalt richtig anzeigen lassen.
    Nichts ist so hart wie das Leben!

    http://www.rootprogger.de

  8. #7
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    Danke für die Hinweise.

    Der Grund war folgende Zeile in der PHP.ini:

    ; Document expires after n minutes.
    session.cache_expire = 180
    Damit wurden die Dateien gelöscht, die im angegebenen Verzeichnis erzeug waren:
    resources.session.save_path = APPLICATION_PATH "/../data/session/"
    Warum die Einträge

    resources.session.gc_maxlifetime = 86400
    resources.session.remember_me_seconds = 86400
    ignoriert werden, ist mir nicht klar, aber erstmal vielen Dank für Eure Hinweise!

  9. #8
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    Irrtum :-(
    War's doch nicht - ich habe das jetzt auf 1800 gesetzt und were trotzdem nach gefühlten 60 sekunden untätigkeit wieder rausgeschmissen.

    Dabei gibt er mir folgendes aus:
    Session expires: gc_maxlifetime: 86400
    cacheexpire: 1800

  10. #9
    Erfahrener Benutzer
    Registriert seit
    10.09.2007
    Ort
    Wuppertal
    Beiträge
    5.725
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    cache_expire wird auch in Minuten angegben, d.h. es stand vorher auf 3 Stunden, was auch schon völlig ausreichend ist.

    Hast du denn mal die HTTP Header untersucht?



    PS: Was mir gerade noch einfällt ... Speicherst du noch weitere Cookies? Wenn ja, sind es weniger als 20? Gibt es einen Cookie, der größer als 4095 Byte ist? Wenn du eine der beiden Fragen mit "ja" beantwortest, dann ist das verhalten des Browsers so, dass er gar keine Cookies mehr sendet - und du dadurch "ausgeloggt" bist, weil keine Session Daten übertragen werden.
    Neues Projekt: zandman.de - Status: WIP




  11. #10
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    Nein, ich speichere ansonsten nichts. - Keine weiteren Cookies. Was soll ich beim HTTP Header suchen?

  12. #11
    Erfahrener Benutzer
    Registriert seit
    10.09.2007
    Ort
    Wuppertal
    Beiträge
    5.725
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    Ob der Session Cookie vom Browser zum Server gesendet wird, wenn du ausgeloggt wirst bzw. dann ausgeloggt bist, obwohl du erwartest, eingeloggt zu sein.

    Zudem könntest du dir auch noch die Cookie Lifetime anschauen, wie lange der Session Cookie gültig ist.
    Neues Projekt: zandman.de - Status: WIP




  13. The Following User Says Thank You to DennisBecker For This Useful Post:

    -iis- (25.09.2012)

  14. #12
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    $_SESSION['__ZF']['Zend_Auth']['ENT']
    ergibt bei mir immer 60 sekunden

    D.h. wenn ich das mit echo ausgebe, dann kommt mal 50, mal 47 oder sonstwas raus, aber nie über 60 sekunden -
    Wo setze ich denn diesen wert? In der PHP.INI? Oder kommt das aus meiner Application.ini ? Oder ein nicht gesetzter default?

  15. #13
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    Auch des explizite Setzen der Sessiondauer wird ignoriert:

    $auth = Zend_Auth::getInstance();
    $session = new Zend_Session_Namespace($auth->getStorage()->getNamespace() );
    $session->setExpirationSeconds(5*60);

  16. #14
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    Jetzt habe ich das ganze nochmal umgebaut und speichere die Session in der Datenbank

    hier steht nun:
    id:
    vem2lgl02h3v4eknqm8rt1f7g0
    modiefied:
    1348494762
    lifetime:
    20000
    clientip:
    <NULL>
    data:
    "__ZF|a:1:{s:9:""Zend_Auth"";a:1:{s:3:""ENT"";i:13 48494822;}}Zend_Auth|a:1:{s:7:""storage"";O:8:""st dClass"":7:{s:2:""id"";i:90003;s:7:""surname"";s:9 :""vom Stein"";s:7:""prename"";s:7:""Susanne"";s:5:""emai l"";s:11:""svs@iis.net"";s:5:""login"";s:7:""Susan ne"";s:4:""role"";s:13:""administrator"";s:4:""sit e"";s:7:""Rostock"";}}"

    Und obwohl die lifetime bei 20.000 steht (sollen wohl sekunden sein), ist die session wieder nach knapp 60 sekunden weg, d.h.
    Zend_Auth::getInstance()->hasIdentity())
    liefert False!


    Hat noch jemand eine Idee? Ich geb's bald auf...

  17. #15
    Erfahrener Benutzer
    Registriert seit
    12.03.2010
    Ort
    Gersthofen/Augsburg
    Beiträge
    424
    Thanks
    22
    Thanked 30 Times in 20 Posts

    Standard

    schon mal versucht auf einem anderen System zu testen?
    Nichts ist so hart wie das Leben!

    http://www.rootprogger.de

  18. The Following User Says Thank You to KnechtRootRecht For This Useful Post:

    -iis- (25.09.2012)

  19. #16
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    So,

    Fehler gefunden. Im Layout Template hatte sich folgender Code eingefunden:
    $session->setExpirationSeconds( 60 );
    Das erklärt natürlich alles

    Zeile entfernt, Session bleibt.

    Allerdings gibt es noch ein etwas seltsames Verhalten:
    Eigentlich sollte die Session doch bei jedem Browser-Request wieder verlängert werden, oder?

    So bleibt sie jetzt bestehen, wird runtergezählt und ist dann eben nach der eingestellten Zeit weg...
    Muß ich die explizit bei jedem Request wieder selber hochsetzen, z.B. im der preDispatch-Methode?

  20. #17
    Erfahrener Benutzer
    Registriert seit
    10.09.2007
    Ort
    Wuppertal
    Beiträge
    5.725
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    Uff, den Fehler hätten wir nie finden können


    Und ja, deine Annahme ist korrekt, dass bei jedem Request, der vom Browser kommt mit der SessionID die Ablaufzeit der Session wieder hochsetzt. Wenn dem nicht so ist, hast du den Code im Post #13 wieder entfernt und die anderen Änderungen, die du hier beschrieben hast, auch wieder auf die Default-Werte zurückgesetzt / Config Einträge in der application.ini wieder entfernt?
    Neues Projekt: zandman.de - Status: WIP




  21. #18
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    In meinem Auth-Controller mache ich das:

    PHP-Code:
        $authAdapter $this->getAuthAdapter(); 
        
    $authAdapter
                    
    ->setIdentity($loginname)
                    ->
    setCredential($loginpassword);
        
        
    $auth Zend_Auth::getInstance();
            
        
    $result $auth->authenticate($authAdapter);
        
        if (
    $result->isValid()) {        
                
    $authSession = new Zend_Session_Namespace('Zend_Auth');
                
    $sessionexpirationtime Zend_Registry::get('sessionexpirationtime');
                
    $authSession->setExpirationSeconds($sessionexpirationtime); // valid for 5 minutes
                
                // store all data from the user table applicationwide
                
    $identity $authAdapter->getResultRowObject(null'password');
                
    // get the storage
                
    $authStorage $auth->getStorage(); 
                
    // put the identity into the session storage
                
    $authStorage->write($identity);
        } 
    und da ich die Session jetzt in der Datenbank speichere, habe ich in der application.ini noch folgende Einträge:

    Code:
    resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
    resources.session.saveHandler.options.name = "appsession"
    resources.session.saveHandler.options.primary = "id"
    resources.session.saveHandler.options.modifiedColumn = "modified"
    resources.session.saveHandler.options.dataColumn = "data"
    resources.session.saveHandler.options.lifetimeColumn = "lifetime"

    Das war's eigentlich...
    Geändert von DennisBecker (25.09.2012 um 16:08 Uhr)

  22. #19
    Erfahrener Benutzer
    Registriert seit
    10.09.2007
    Ort
    Wuppertal
    Beiträge
    5.725
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    Ich hab mal deinen beitrag editiert und PHP und CODE BBCodes eingefügt, damit man es besser lesen kann.

    Hier mal ne Fehlerbereinigte Version:
    PHP-Code:
        $authAdapter $this->getAuthAdapter(); 
        
    $authAdapter
                    
    ->setIdentity($loginname)
                    ->
    setCredential($loginpassword);
            
        
    $result $authAdapter->authenticate($authAdapter);
        
        if (
    $result->isValid()) {        
                
                
    // store all data from the user table applicationwide
                
    $identity $authAdapter->getResultRowObject(null'password');

                
    $auth Zend_Auth::getInstance();
                
    // get the storage
                
    $authStorage $auth->getStorage(); 
                
    // put the identity into the session storage
                
    $authStorage->write($identity);
        } 
    Wenn du die Session auf 5 Minuten begrenzen willst, solltest du das in php.ini anpassen.
    Neues Projekt: zandman.de - Status: WIP




  23. #20
    Erfahrener Benutzer
    Registriert seit
    10.08.2012
    Beiträge
    161
    Thanks
    24
    Thanked 3 Times in 1 Post

    Standard

    Hm, sieht wesentlich aufgeräumter auf als meine Variante -
    wo holt sich die Anwendung jetzt die Session lifetime her?

    Ich brauche doch trotzdem den Code, der die Sessiondauer setzt, oder?
    Code:
                $authSession = new Zend_Session_Namespace('Zend_Auth');
                $sessionexpirationtime = Zend_Registry::get('sessionexpirationtime');
                $authSession->setExpirationSeconds($sessionexpirationtime); // valid for 5 minutes
    Und welcher Eintrag in der php.ini is es genau?
    session.gc_maxlifetime = 1440?

    Wenn ich
    session.cookie_lifetime = 0
    habe, dann läuft die Session doch überhaupt nicht ab...
    Geändert von -iis- (25.09.2012 um 16:35 Uhr)

Seite 1 von 2 1 2 LetzteLetzte

Ähnliche Themen

  1. Session ID wird ständig erneuert / JQuery Ajax Request
    Von andre.ballensiefen im Forum Auth
    Antworten: 1
    Letzter Beitrag: 21.08.2011, 18:07
  2. Zend_Pdf drawText rechtsbündig
    Von SchmitzKater im Forum Einsteigerfragen
    Antworten: 7
    Letzter Beitrag: 12.08.2011, 15:51
  3. Date Validierung nur Unvollständig möglich?
    Von struggle82 im Forum Formulare
    Antworten: 12
    Letzter Beitrag: 22.04.2009, 11:27
  4. Antworten: 1
    Letzter Beitrag: 04.01.2009, 17:56
  5. DB-Objekt ständig verfügbar?
    Von stun im Forum DB
    Antworten: 3
    Letzter Beitrag: 26.02.2007, 11:56

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •