Zum Inhalt springen

Session-Id des aktuellen Benutzers abfragen

Erstellt am 20. März 2006 · 4 Antworten · letzte Antwort am 5. Februar 2016

Tags: Frage

Webpinsel ·

Hallo Forum,

gibt es eine Variable, mit der ich ohne große Datenbankabfrage die aktuelle Session-Id des Frontend-Benutzers abfragen kann? Ähnlich wie ich mit

$GLOBALS['TSFE']->fe_user->user['uid']

zum Beispiel die Benutzer-Id abfragen kann?

Gruß,
Webpinsel

birgitr ·

Session Frontend

$my_vars = $GLOBALS["TSFE"]->fe_user->getKey('ses','tx_myextension');
$my_vars['somevalue'] = "Hello World";
		$GLOBALS["TSFE"]->fe_user->setKey('ses','tx_myextension', $my_vars);

 // Speichern eines beliebigen Wertes in einer Session
// unter $firstvisit wird der (Wert) Timestamp gespeichert
$TSFE->fe_user->setKey('ses', 'firstvisit', 'time()'); 
// Speicherung in Tabelle fe_session_data
$TSFE->fe_user->storeSessionData(); 

// Wert später wieder aufnehmen
$firstvisit = $TSFE->fe_user->getkey('ses','firstvisit');

Session Backend

$GLOBALS['BE_USER']->setAndSaveSessionData ('tx_myextension', $my_vars);
davidczadilek ·

Der Thread ist zwar schon alt, aber da ich selber keine vernünftige Dokumentation zu Sessions gefunden habe, abgesehen von der API Ref, poste ich hier mal meinen Ansatz.

Dieser Code wird im 'determineId-PostProc' Hook ganz am Anfang ausgeführt.
Hier ein (veraltetes) Ablaufdiagramm um zu verdeutlichen wo der Hook greift:
https://buzz.typo3.org/uploads/media/TYPO3_Frontend_Rendering_Process_v1.5.pdf

// get session id
// if you dont create a user session, the $ses_id hash will change on each request
$ses_id = $GLOBALS['TSFE']->fe_user->id;

// check if session exists and update or create
if($GLOBALS['TSFE']->fe_user->isExistingSessionRecord($GLOBALS['TSFE']->fe_user->id)) {

    // example: get timestamp of last visit
    $lastVisit = $GLOBALS['TSFE']->fe_user->getKey('ses', 'lastVisit');

    // example: update timestamp of last visit,
    $GLOBALS['TSFE']->fe_user->setAndSaveSessionData('lastVisit', time());

} else {

    // create session - adds record to 'fe_session' table with session id
    $GLOBALS['TSFE']->fe_user->createUserSession();

    // set lastVisit timestamp to session data
    $GLOBALS['TSFE']->fe_user->setKey('ses', 'lastVisit', time());

    // store / update session data ('fe_session_data' table)
    $GLOBALS['TSFE']->fe_user->storeSessionData();
}

Werte in die Datenbank speichern ('fe_session_data' Tabelle) kann man mit einer Zeile:

    $GLOBALS['TSFE']->fe_user->setAndSaveSessionData('dataKey', 'dataValue);

Und wenn man mehrere Werte speichern will sollte man es so machen, um Queries zu sparen:

    $GLOBALS['TSFE']->fe_user->setKey('ses', 'dataKey1', 'dataValue1');
    $GLOBALS['TSFE']->fe_user->setKey('ses', 'dataKey2', 'dataValue2');
    $GLOBALS['TSFE']->fe_user->storeSessionData();

Bei zweiterer Methode muss man den Key Type ('ses' für Session) angeben.

Hoffe ich konnte damit jemanden helfen. Happy Coding! 🙂