php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.01.2012, 18:22  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard Ajax Daten gehen in Session Objekt verloren

Hallo Leute,

und zwar habe ich ein Session Objekt umgesetzt und das funktioniert auch super. Ich habe die Möglichkeit in einer Config Datei die Namespaces für die Session Unterarrays festzulegen. Im Frontcontroller wird das Session Objekt undstanziert, die Namespaces eingetragen und das ganze aufgerufen.Via DI wird dieses Objekt an meine Action Controller und andere Bereiche die ich brauche übergeben. Das klappt auch.

So wenn ich nun ganz normal Post Daten über Formular, Get Daten über Formular oder klicken auf einen Link, oder wenn ich Parameter über die Adressleite übergebe, dann werden die Daten in der Session bzw. dem entsprechenden Namespace gespeichert und bleiben auch erhalten bis ich sie gewollt lösche oder einen Namespace lösche.

Mein Problem aber sind nun Ajax Get Requests (Post habe ich noch nicht ausprobiert, weis nicht ob das in dem Fall einen Unterschied macht). Wenn ich die abschicke und in der jeweiligen Action die Werte in die Session schreibe sind die nur kurz da. Drücke ich nach dem Request auf einen Link und führe eine andere Action aus, dann sind sie noch drin (das zeigte mir meine Testausgabe), drücke ich aber dann noch ein zweites mal einen Link und löse somit wieder ne andere Action aus, dann auf einmal verschwinden die Werte aus der Session ohne das ich irgendwo etwas ausführe das die Werte gelöscht bzw. rüchgesetzt werden sollen.

Meine Frage also, wie kann ich es erreichen das Werte aus einem Get Request dauerhaft in der Session gespeichert bleiben und nicht wieder gelöscht werden?

Ich hatte mir über legt das, wenn ich den Ajax Request z.B. bei einer Ajax Suche ausführe (zu dem Zeitpunkt sind die Daten in der Session) und ich danach z.B. auf einen Link zur Suchergebnisdetailseite klicke, dann in der Action die zur Zeit in der Session gespeicherten Werte noch mal in die Session schreibe, dann wären die ja dauerhaft da. Aber mir kommt der GEdanke ziemlich tricki vor und deshalb frage ich hier ob es einen anderen Weg gibt das zu realisieren.

Ich bin mir nicht sicher aber denke das ich für das Problem kein PHP Code senden brauche. Wenn aber doch, dann poste ich den Code den ihr eventuell sehen müsst / wollt natürlich nach.

Vielen Dank für eure Zeit und Hilfe. Gruß der Litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.01.2012, 18:41  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Wie hast du die Werte der Session abgefragt? In die Datenbank gedumpt? ins Error log? Oder an den Client ausgeliefert?

Getippt würde ich sagen, es liegt am Caching des Responses durch den Browser.
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 27.01.2012, 18:44  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Ich habe einfach die Werte in die Session geschrieben, nirgends zwischen gespeichert oder so. Dann einfach nur das Session Objekt ausgeben lassen.

Wenn das nicht wirklich die Antwort war die du erwartet hast als Infprmation, dann habe ich dich falsch verstanden.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 27.01.2012, 18:51  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Zitat:
Dann einfach nur das Session Objekt ausgeben lassen.
Und in welcher Form?
Per json_encode zurückgeschickt? Per var_export in die Datenbank?

Häng mal testweise timestamps an deine requests und teste nochmal


edit:


die header hier schick ich im Regelfall von php aus, um caching zu unterbinden - soll dir nur helfen, dein Problem einzugrenzen:

PHP-Code:
$this
            
->setHeader("Expires""-1")
            ->
setHeader("Cache-Control""post-check=0, pre-check=0")
            ->
setHeader("Pragma""no-cache")
            ->
setHeader("Last-Modified: "gmdate("D, d M Y H:i:s") . " GMT"); 
(durch header(..) aufrufe ersetzen).

Grüße
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog

Geändert von rudygotya (27.01.2012 um 18:55 Uhr).
rudygotya ist offline   Mit Zitat antworten
Alt 27.01.2012, 18:58  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Ich mache das momentan so.

Code:
var searchString = '&name=' + target.value;

    ajaxRequest.onreadystatechange = function () {
        
        if ( this.readyState == 4 && this.status == 200 ) {
            document.getElementById( "user_result_list" ).innerHTML = ajaxRequest.responseText;
            profileIds();
        }
    }
    
    ajaxRequest.open("GET", "http://localhost/WendtNeu/index.php?user/Ajax/usersearch/" + searchString);
    ajaxRequest.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
    ajaxRequest.send( null );
Und hier PHP Code der Action.

PHP-Code:
public function usersearchAction()
    {
        if(
$this->_request->isGet()) {
            
$value $this->_request->get();
            
            if(isset(
$value['name'])) {

                
$this->_model->setLastName($this->_request->getValue('name'));
            } elseif(isset(
$value['state']) && $this->_request->getValue('state') != 'opt') {
                
$this->_model->setState($this->_request->getValue('state'));
            }
        }
        
        
$this->_view->resultList $this->_modelMapper->getUserList($this->_model);
        echo 
$this->_view->renderPartial();
    } 

Die Timestamps woran hängen?

Code:
ajaxRequest.open("GET", "http://localhost/WendtNeu/index.php?user/Ajax/usersearch/" + searchString);
Hier hinter das searchString? Welchen Zweck soll das haben mit dem Timestamp?
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 27.01.2012, 19:07  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Um caching probleme ausschließen zu können. Vielleicht bin auch ich total auf dem falschen Dampfer. War nur meine erste Vermutung ohne Code zu kennen.

Ersetz mal die Zeile durch das hier:

PHP-Code:
var date = new Date;
ajaxRequest.open("GET""http://localhost/WendtNeu/index.php?user/Ajax/usersearch/" searchString "&nc=" +date.getTime()); 
(oder verwende die oben aufgeführten php header).

Verwendest du das Zend Framework?
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 27.01.2012, 19:23  
meikel
Gast
 
Beiträge: n/a
Standard

Heiteres Rätselraten...:
Zitat:
Zitat von litterauspirna Beitrag anzeigen
Meine Frage also, wie kann ich es erreichen das Werte aus einem Get Request dauerhaft in der Session gespeichert bleiben und nicht wieder gelöscht werden?
KA. Wie sähe denn das Script aus, welches nicht das tut, was Du willst?

Zitat:
Ich bin mir nicht sicher aber denke das ich für das Problem kein PHP Code senden brauche.
Bei Sessionproblemen will ich nicht nur das Script sehen, sondern auch noch die Sessionconfig.
  Mit Zitat antworten
Alt 27.01.2012, 19:23  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Also mit dem Caching denke ich hängt das nicht zusammen.
Habe beide Varianten ausprobiert. Das gleiche Resultat.
Nein ist ne kleine Eigenentwicklung.

Also dann werde ich mal ein wenig Code posten.

Hier meine Session Klasse.

PHP-Code:
<?php
require_once LIB_PATH 'Session/SessionException.php';

/**
 * 
 *     @class Session
 *     @author LIT-WEB
 *     @package classes
 *     @subpackage Session
 *     @version 0.1
 * 
 *     Klasse Session registriert Session Namespaces und Werte in den Namespaces
 *
 */
class Session
{
    
/**
     * 
     *     Default Namespace
     *     @var String
     */
    
const DEFAULT_NAMESPACE 'default';
    
    
/**
     * 
     *     enthält alle registrierten namespaces
     *     @var Array
     */
    
protected $_namespaces = array();
    
    
/**
     * 
     *     initialisieren des default namespaces
     */
    
public function __construct()
    {
        
$this->_namespaces[] = self::DEFAULT_NAMESPACE;
    }
    
    
/**
     * 
     *     setzen eines Session Namespaces
     *     @param String $value
     */
    
public function setNamespace(array $pNamesspaces)
    {
        foreach(
$pNamesspaces as $key => $value) {
            
$this->_namespaces[] = $value;
        }

        return 
$this;
    }
    
    
/**
     * 
     *     Rückgabe der Session Namespaces
     *     @return Array
     */
    
public function getNamespaces()
    {
        return 
$this->_namespaces;
    }
    
    
/**
     * 
     *     gibt den Inhalt eines bestimmten Sessionarrays / Namespaces zurück
     *     @param String $pNamespace
     */
    
public function getNamespace($pNamespace)
    {
        return 
$_SESSION[$pNamespace];
    }
    
    
/**
     * 
     *     session array für den gebrauch aufbereiten
     *     @return Session
     */
    
public function initSession()
    {
        foreach(
$this->getNamespaces() as $key => $value) {
            
$_SESSION[$value] = '';
        }
        
        return 
$this;
    }
    
    
/**
     * 
     *     setzen von session werten zu einem bestimmten namespace
     *     @param String $pValue
     *     @param String $pNamespace
     *     @return Session
     */
    
public function set($pKey$pValue$pNamespace null)
    {
        (
null == $pNamespace)
            ? 
$_SESSION[self::DEFAULT_NAMESPACE][$pKey] = $pValue
            
$_SESSION[$pNamespace][$pKey] = $pValue;
            
        return 
$this;
    }
    
    
/**
     * 
     *     gibt das gesamte Session Array zurück
     *     @return Array
     */
    
public function getSession()
    {
        return 
$_SESSION;
    }
    
    
/**
     * 
     *     killt / entfernt ein komplettes Array aus dem Session Container
     *     @param String $pNamespace
     */
    
public function resetNamespace($pNamespace)
    {
        if(
array_key_exists($pNamespace$_SESSION)) {
            unset(
$_SESSION[$pNamespace]);
        }
    }
    
    
/**
     * 
     *     konvertiert das session array in ein session objekt
     *     @param array $pSession
     *     @return Session
     */
    
public function get(array $pSession)
    {
        
$session = new Session();
        
        foreach(
$pSession as $key => $value) {
            
            if(
is_array($value)) {
                
$session->$key $this->get($value);
            } else {
                
$session->$key $value;
            }
        }
        
        return 
$session;
    }
}
Hier im Frontcontroller instanziere ich das Objekt.

PHP-Code:
    /**
     * 
     *     Initialisierung des Session Objektes
     */
    
protected function _initSessionHandler()
    {
        
$this->_session = new Session();
        foreach((array)
$this->_config->namespaces->session->namespace as $key => $value){
            
$this->_session->setNamespace($value);
        }
        return 
$this->_session;
    } 
Und übergebe diese dann an die Controller mittels DI.

So und in einer Action benutze ich die dann so.

PHP-Code:
public function plzsearchAction()
    {
//        header("Expires", "-1");
//        header("Cache-Control", "post-check=0, pre-check=0");
//        header("Pragma", "no-cache");
//        header("Last-Modified: ", gmdate("D, d M Y H:i:s") . " GMT"); 
        
        
$ss $this->_appBoostrap->getSession();
        
$ss->set('plz'$this->_request->getValue('plz'), 'search');
        
$ssV $ss->get($ss->getSession());
        
        
$this->_model->setZipCode($this->_request->getValue('plz'));
        
$this->_view->data $this->_mapper->getObjectsByZipCode($this->_model);
        
        if(
false === $this->_request->isAjax()) {
            echo 
$this->_view->renderPartial();
        }
    } 
Das ist alles an Code was ich dazu posten kann. Kannst du damit etwas anfangen?

Und zum Vergleich aus meinem Auth Objekt.

PHP-Code:
public function __construct(I_Auth $pAdapterSession $pSession)
    {
        
$this->_session $pSession;
        
$this->_adapter $pAdapter;
        
$this->_result $this->_adapter->authenticate();
        
$this->_auth();
        
$this->_auth $this->_session->get($this->_session->getSession());
        
        if(isset(
$this->_auth->auth)) {
            
$this->_identity $this->_auth->auth->identity;
            
$this->_idUser $this->_auth->auth->id;
            
$this->_role $this->_auth->auth->role;
        }
    } 
Genau das gleiche Vorgehen und die Werte bleiben aber im Session Objekt erhalten.

HIer eine Action die ich via Link aufrufe.

PHP-Code:
public function objectAction()
    {
        
$sess $this->_appBoostrap->getSession();
        
$sess->set('value''object_test''test');
        
$aus $sess->get($sess->getSession());
        
        
$this->_model->setIdObj($this->_request->getOption('obj'));
        
$data $this->_modelMapper->getObjectById($this->_model);
        
$this->_view->data $data;
        
$contacts = array();
        
        foreach(
$data['contacts'] as $key => $value) {
            
$contacts[$data['contacts'][$key]['contact_messi']][] = $data['contacts'][$key];
        }
        
        
$this->_view->contacts $contacts;
        
        if(
false === $this->_request->isAjax()) {
            
$this->_view->render($this->_request->getAction());
        }
    } 
Gleiches Vorgehen und auch hier bleiben die Werte erhalten.

Nur bei Ajax Requests tritt das Problem auf.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de

Geändert von litterauspirna (27.01.2012 um 19:27 Uhr).
litterauspirna ist offline   Mit Zitat antworten
Alt 27.01.2012, 19:42  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von litterauspirna Beitrag anzeigen
Also mit dem Caching denke ich hängt das nicht zusammen.
Ich auch nicht. Allerdings vermisse ich in Deinem Script so ne Kleinigkeit wie session_start() und ggf. einen destructor mit session_write_close().
Die Stapelarbeiten namespace <-> $_SESSION sind gewöhnungsbedürftig. Sowas müßte ich mir erst schönsaufen. <ggg>

Zitat:
Nur bei Ajax Requests tritt das Problem auf.
Grundsätzlich die Frage:
Code:
session.use_only_cookies = On
session.use_trans_sid = 0
Falls nicht, wäre das ein Problem.
  Mit Zitat antworten
Alt 27.01.2012, 19:47  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Zitat:
Also mit dem Caching denke ich hängt das nicht zusammen. Habe beide Varianten ausprobiert. Das gleiche Resultat.
Wär auch zu schön gewesen, wenns so einfach gewesen wäre
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Session Werte über eine Klasse speichern und verwenden für Auth Objekt litterauspirna PHP Einsteiger 3 19.10.2011 10:27
[Erledigt] Fragen zu Login und Session (geschützter Bereich) ts.ts PHP Einsteiger 12 14.10.2011 17:36
[Erledigt] PHP Session Daten entschlüsseln Deltachaos PHP-Fortgeschrittene 26 15.06.2010 18:53
[Erledigt] leeres request trotz übergebenen Daten AJAX mupilz JavaScript, Ajax und mehr 6 06.04.2010 06:55
[Erledigt] mit AJAX Daten speichern klappt nicht (TYP falsch?) MueThoS JavaScript, Ajax und mehr 5 16.03.2010 06:06
Session geht bei include verloren argon PHP Tipps 2006 9 14.09.2006 19:45
session geht verloren imported_kremser PHP Tipps 2006 7 15.07.2006 23:36
Objekt in Session übergeben jacos PHP Tipps 2006 2 21.02.2006 00:11
Session geht immer verloren. Ich werde noch verrückt. PHP-Fortgeschrittene 3 08.10.2005 10:33
Session Daten in gehen in Function verloren pherfinion PHP Tipps 2005-2 5 19.08.2005 16:04
Session ID geht verloren. child pid (123) exit signal ... fa PHP Tipps 2005 11 12.05.2005 09:54
Session Variable geht verloren! (Homepage inside) PHP Tipps 2005 11 15.02.2005 09:17
Session gibt keine Daten aus PHP Tipps 2005 8 04.02.2005 21:09
Daten aus Session löschen rocco PHP Tipps 2004 13 02.09.2004 19:38
Bei Fehler Daten an Formular zurück, mit Session Sonja PHP Tipps 2004 3 22.06.2004 18:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
ajax session, classe session php ajax, php session cookie ajax falsche daten?, zend session geht verloren ajax, php session objekte ajax, ajax call php session verlust, php session ajax, session ajax speichern, ajax setvalue, php ajax objekt in session, ajax.request keine session erhalten, session ajax geht verloren, php $_session andere daten trotz gleicher id?

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum