Hallo,
ich habe auf einer Seite mittels der Extension "PHP Script" eine PHP-Datei eingebunden. Dort lasse ich mir Inhalte aus der Session anzeigen
$data = $GLOBALS['TSFE']->fe_user->getKey('ses', 'meine_session')
foreach ($data as ...
Nun will ich nach dem Anzeigen des Inhalts der Session diese wieder löschen.
$leer = '';
$GLOBALS['TSFE']->fe_user->setKey('ses', 'meine_session', $leer);
Das funktioniert aber leider nicht. Meine Frage: Wie kann ich den Inhalt von 'meine_session' löschen? Welche Dateien etc. muss ich ggf. noch manuell einbinden? Oder muss ich meine ganze PHP-Datei in eine Extension packen?
In einer anderen Extension habe ich das exakt so mit dem setKey gemacht und dort funktioniert es. Nur eben in der externen PHP-Datei nicht.
Da "meine_session" ein Array ist,
mußt du jedes Feld im Array löschen und dieses geleerte Array zurückschreiben.
(wenn ich mich recht erinnere, no warranty 😉 )
Nee, das funktioniert leider irgendwie überhaupt nicht.
function clear()
{
$liste = '';
$GLOBALS['TSFE']->fe_user->setKey('ses', 'liste', $liste);
return;
}
In meiner Extension funktioniert das hier wunderbar. Aber im PHP-Script nicht. Selbst wenn ich das Array Schritt für Schritt lösche, scheint das einfach ignoriert zu werden.
foreach ($liste as $key => $var) {
unset($liste[$key]);
}
unset($liste);
$GLOBALS['TSFE']->fe_user->setKey('ses', 'liste', $liste);
Geht nicht. Ich sehe wohl gerade den Wald vor lauter Bäumen nicht mehr :x
File that will be included. This file must be valid PHP-code! It's included
with "include()";
Directions:
1) All content must be put into $content. No output must be echo'ed
out!
2) Call $GLOBALS["TSFE"]->set_no_cache(), if you want to disable
caching of the page. Set this during development! And set it, if the content
you create may not be cached.
NOTE: If you have a parsing error in your include script the
$GLOBALS["TSFE"]->set_no_cache() function is NOT executed and
thereby does not disable caching. Upon a parse-error you must manually
clear the page-cache after you have corrected your error!
3) the array $conf contains the configuration for the PHP_SCRIPT
cObject. Try debug($conf) to see the content printed out for debugging!
See later in this manual for an introduction to writing your own PHP
include-scripts.
Gibst du den Inhalt per echo aus ?
Ja und Nein. Ich hole mir alles in $data und gebe das dann schon mit einem echo aus. Aber das $data hat ja mit der Session nichts mehr zu tun.
In der Extension (wo es mit dem löschen auch funktioniert) habe ich dann schon Marker.
Wichtig ist doch - wenn ich das richtig verstehe - der zweite Parameter bei "setKey". Der definiert doch den internen Namen. Das heisst doch, ich kann mit
$hallo = $GLOBALS['TSFE']->getKey('ses', 'abc');
die Daten aus der Session holen und mit
$GLOBALS['TSFE']->setKey('ses', 'abc', $array);
das Array wieder überschreiben. Wichtig ist doch eigentlich nur das "abc" hier.
Ich habe auch parallel dazu in derselben Datei unmittelbar nach "überschreiben" der Session eine weitere neu angelegt und die wird korrekt gespeichert.
$zweite[0] = 'a';
$zweite[1] = 'b';
$GLOBALS['TSFE']->setKey('ses', 'zweite', $zweite);
Also muss es doch irgendwie an dem Array von mir liegen.
$GLOBALS["TSFE"]->set_no_cache() ist und war gesetzt.
Seitencache habe ich im BE nochmal gelöscht.
Und error_reporting(E_ALL) gesetzt. Kein parse_error oder sowas.
Wenn du dich einfach nicht an die vorgeschriebene Verfahrensweise halten willst,
ist dir eben nicht zu helfen 😉
tschüß & viel Glück
Wie ist denn die vorgeschriebene Verfahrensweise? Vielleicht kannst Du mir ja mal einen Beispielcode posten? Liege ich denn so falsch?
So, es funktioniert jetzt. Aber da ich auch das jetzt nicht verstehe, wäre ich Dir über eine Aufklärung sehr dankbar.
Aktuell habe ich das jetzt so gelöst und - warum auch immer - es funktioniert.
<?php
$liste = '';
$GLOBALS['TSFE']->fe_user->setKey('ses', 'liste', $liste);
header('location:/bestaetigung.html?&L='.$GLOBALS["TSFE"]->sys_language_uid);
# exit(); // muss auskommentiert sein, sonst wird die Session nicht geleert
?>
Sobald ich das exit() wieder mit reinnehme, bleibt die Session erhalten. Ich raff gerade nichts mehr #paralyzed#
Kann das was mit den PHP Einstellungen zu tun haben? Ich Poste mal einen Auszug der config.
<VirtualHost xx.xxx.xx.xxx:80>
ServerName xxx.de
ServerAlias www.xxx.de
ServerAdmin hostmaster@xxx.de
DocumentRoot /srv/www/vhosts/de.xxx.www/html
CustomLog "|/usr/local/sbin/cronolog /var/log/httpd/vhosts/access/de.xxx.www.%Y-%m.log" combined
ErrorLog "|/usr/local/sbin/cronolog /var/log/httpd/vhosts/error/de.xxx.www.%Y-%m.log"
php_value include_path ".:/usr/share/php5/PEAR"
php_value upload_max_filesize 10M
php_admin_value memory_limit 64M
php_admin_flag display_errors On
php_admin_value error_reporting E_ALL
php_admin_flag short_open_tag Off
php_admin_flag register_globals off
php_admin_flag register_argc_argv Off
php_admin_flag magic_quotes_gpc Off
php_admin_flag allow_call_time_pass_reference off
# don't loose time with IP address lookups
HostnameLookups Off
# needed for named virtual hosts
UseCanonicalName Off
ServerSignature Off
<Directory /srv/www/vhosts/de.xxx.www/html>
Options -Indexes +FollowSymLinks -Includes -MultiViews
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "restricted area"
AuthUserFile /etc/apache2/auth/users
Require user xxx xxx
</Directory>
### Begin: Rewrite stuff ###
# Enable URL rewriting
RewriteEngine On
etc...
Ich teste das nochmal selbst ausgiebig aus. Jetzt ist aber erstmal Feierabend angesagt.
Sobald ich das exit() wieder mit reinnehme, bleibt die Session erhalten. Ich raff gerade nichts mehr icon_rolleyes.gif
Ich beschäftige mich gerade mit Sessionhandling in Typo3 und habei dabei diesen Text in class.tslib_feuserauth.php gefunden:
Notice: Simply calling this function will not save the data to the database! The actual saving is done in storeSessionData() which is called as some of the last things in index_ts.php. So if you exit before this point, nothing gets saved of course! And the solution is to call $GLOBALS['TSFE']->storeSessionData(); before you exit.
D.h. also das du, wenn du wirklich exit() brauchst, noch
$GLOBALS['TSFE']->storeSessionData();
vorher aufrufen musst und die Session wird gespeichert.
Ich hoffe die Information kommt nicht zu spät 😉