Hallo,
ich erstelle gerade eine eigene Extension mit Warenkorb Funktion.
Die Artikel im Warenkorb lege ich in die Session. Nun möchte ich, dass der Session Cookie "fe_typo_user" länger als "bis zum Ende der Sitzung" gespeichert wird - sprich: z.B. eine Woche.
Im Install Tool habe ich entsprechende Einstellungen vorgenommen:
$TYPO3_CONF_VARS['FE']['lifetime'] = '604800';
$TYPO3_CONF_VARS['FE']['sessionDataLifetime'] = '604800';
$TYPO3_CONF_VARS['FE']['permalogin'] = '2';
Aber der Cookie wird dennoch nur bis zum Ende der Sitzung gespeichert.
Welche Schraube muss ich dafür denn noch drehen?
Im Install Tool habe ich weiter nichts dazu gefunden.
Übrigens: Es gibt derzeit noch keinen FE Login. Bis ein Artikel im Warenkorb liegt, ändert sich die Session ID bei jedem Seitenaufruf, danach bleibt Sie "gleich". Sollte ja also auch ohne FE Login funktionieren.
Grüße,
caom
Was ist für dich das Ende der Sitzung? Wahrscheinlich löscht der Browser den Cookie einfach vor Ende der Lifetime...
Wenn ich mir den Cookie am Firefox (Cookies ansehen) anschauen, steht dort bei "Gültigkeit" "bis zum Ende der Sitzung". D.h. ich schließe den browser und mein Warenkorb ist futsch.
Es ist also keine "lifetime" angegeben.
Temporär (bis der Browser geschlossen wird):
$GLOBALS['TSFE']->fe_user->setKey('ses', 'value', 'test');
Permanent (Erfordert ein FE-Login):
$GLOBALS['TSFE']->fe_user->setKey('user', 'value', 'test');
Wenn du also ein permanentes Cookie setzen willst ohne FE-Login, dann musst du nachhelfen.
Danke für deine Antwort. Eindeutig, ohne FE Login gibt es keine "langzeit-Cookies".
Also würde ich nun gerne via XClass erweitern:
$TYPO3_CONF_VARS['FE']['XCLASS']['t3lib/class.t3lib_userauth.php'] = t3lib_extMgm::extPath($_EXTKEY).'classes/class.ux_t3lib_userauth.php';
<?php
class ux_t3lib_userAuth extends t3lib_userAuth {
protected function setSessionCookie() {
print 'jo';
exit;
}
}
?>
Die Datei wird definitiv geladen, aber die Klasse wird nicht erweitert und die Methode wird nicht überschrieben. Hat jemand eine weitere Idee hierzu? Ich habe bereits ab und zu mit XClass diverse Extensions erweitert, hat immer tadellos funktioniert.
Damn!
Ich würde ein Cookie über PHP setzen (oder alternativ sogar mit JavaScript).
Wenn der User sich erstmalig registriert dann auf setKey() umschwenken.
Hey,
hilft mir glaube ich nicht weiter, TYPO3 überschreibt ja bei jedem Reload den Cookie, sofern noch nichts in der Session liegt.
Eine Möglichkeit wäre wahrscheinlich:
1. FE Cookie auslesen und mit MySQL prüfen ob was in der fe_sessions liegt
2. Wenn was drin liegt, ändert sich die Session ID nicht mehr
3. Session ID in separaten, langzeit Cookie legen
4. Beim nächsten Besuch prüfen, wenn langzeit Cookie vorhanden den "fe_typo_user" überschreiben.
Ein Test ist es Wert.
Grüße!
Hier eine funktionierende Lösung. Ob die schön ist, sei dahin gestellt 🙂
private function checkLifetimeCookie($cookiename, $lifetime) {
if((isset($_COOKIE[$cookiename]) && isset($_COOKIE['fe_typo_user']) && $_COOKIE[$cookiename] != $_COOKIE['fe_typo_user']) || (isset($_COOKIE[$cookiename]) && !isset($_COOKIE['fe_typo_user']))) {
setcookie('fe_typo_user', $_COOKIE[$cookiename], 0, '/');
header('Location: '.$_SERVER['REQUEST_URI']);
}
if(!isset($_COOKIE[$cookiename]) && isset($_COOKIE['fe_typo_user'])) {
$selectFields = 'hash';
$fromTable = 'fe_session_data';
$whereClause = 'hash = "'.$this->mysqlEscape($_COOKIE['fe_typo_user']).'"';
$groupBy = '';
$orderBy = '';
$limit = '1';
$ses = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows($selectFields,$fromTable,$whereClause,$groupBy,$orderBy,$limit);
if(count($ses) == 1) {
setcookie($cookiename, $_COOKIE['fe_typo_user'], time() + $lifetime, '/');
}
}
}
private function mysqlEscape($value) {
return mysql_real_escape_string($value);
}
Und der dazugehörige Aufruf:
$this->checkLifetimeCookie('mycookiename', 60 * 60 * 24 * 7);
Vielleicht kann es ja jemand gebrauchen.
Grüße!