FrontendUserAuthentication::prepareSession() 

\nn\t3::FrontendUserAuthentication()->prepareSession($usernameOrUid = NULL, $unhashedSessionId = NULL); 

Eine neue FrontenUser-Session in der Tabelle fe_sessions anlegen. Es kann wahlweise die fe_users.uid oder der fe_users.username übergeben werden.

Der User wird dabei nicht automatisch eingeloggt. Stattdessen wird nur eine gültige Session in der Datenbank angelegt und vorbereitet, die Typo3 später zur Authentifizierung verwenden kann.

Gibt die Session-ID zurück.

Die Session-ID entspricht hierbei exakt dem Wert im fe_typo_user-Cookie - aber nicht zwingend dem Wert, der in fe_sessions.ses_id gespeichert wird. Der Wert in der Datenbank wird ab TYPO3 v11 gehashed.

$sessionId = \nn\t3::FrontendUserAuthentication()->prepareSession( 1 );
$sessionId = \nn\t3::FrontendUserAuthentication()->prepareSession( 'david' );

$hashInDatabase = \nn\t3::Encrypt()->hashSessionId( $sessionId );
Copied!

Falls die Session mit einer existierenden SessionId erneut aufgebaut werden soll, kann als optionaler, zweiter Parameter eine (nicht-gehashte) SessionId übergeben werden:

\nn\t3::FrontendUserAuthentication()->prepareSession( 1, 'meincookiewert' );
\nn\t3::FrontendUserAuthentication()->prepareSession( 1, $_COOKIE['fe_typo_user'] );
Copied!

| @return string

Source Code 

public function prepareSession( $usernameOrUid = null, $unhashedSessionId = null )
{
	if (!$usernameOrUid) return null;
	if ($uid = intval($usernameOrUid)) {
		$user = \nn\t3::Db()->findByUid('fe_users', $uid);
	} else {
		$user = \nn\t3::Db()->findOneByValues('fe_users', ['username'=>$usernameOrUid]);
	}
	if (!$user) return null;
	if (!$unhashedSessionId) {
		$unhashedSessionId = $this->createSessionId();
	}
	$hashedSessionId = \nn\t3::Encrypt()->hashSessionId( $unhashedSessionId );
	$existingSession = \nn\t3::Db()->findOneByValues('fe_sessions', ['ses_id'=>$hashedSessionId]);
	if (!$existingSession) {
		$this->id = $hashedSessionId;
		$record = $this->elevateToFixatedUserSession($unhashedSessionId, $user['uid']);
		\nn\t3::Db()->insert('fe_sessions', $record);
	} else {
		\nn\t3::Db()->update('fe_sessions', ['ses_tstamp'=>$GLOBALS['EXEC_TIME']], ['ses_id'=>$hashedSessionId]);
	}
	$request = \nn\t3::Environment()->getRequest();
	$this->start( $request );
	return $unhashedSessionId;
}
Copied!