Seite 1 von 3

Eigene Cookies nach anmeldung?

Verfasst: 13.04.2009 15:42
von kiew
Hallo,

hab mir vor kurzem das phpBB3 Forum auf meinem Server installiert und so eingerichtet das der Login auf meinem Index ist (nicht der forum index, sondern meine eigene startseite), man darüber im forum einloggt und wieder danach wieder auf meinen index zurückkehrt. (externer login) Soweit so gut :) Nun hätte ich gerne noch Daten in cookies festgehalten, die dann auf dem index verwendet werden sollen. Diese cookies sollen erstellt werden sobald der phpBB login erfolgreich war. Nun die Frage: wo muss ich den befehl setcookie einfügen, damit dieser nach erfolgreichem login erstellt wird? Er soll immer erstellt werden auch wenn der haken bei Remember me nicht gesetzt wurde :grin:

Ich hoffe es kann mir jemand helfen :P

Edit: habs schon selbst gefunden *juhu* :D
Falls es noch jemand benötigt ich habe es in der ucp.php eingebunden:

Code: Alles auswählen

case 'login':
		if ($user->data['is_registered'])
		{
       
     
			redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
      
		}
      setcookie('login', $_POST['username'], time()+60*60*24*70);
		login_box(request_var('redirect', "index.$phpEx"));
    
	break;
Man kann auch die Formulardaten aus dem Forum mit z.B. $_POST['username'] verwenden :)

Re: Eigene Cookies nach anmeldung?

Verfasst: 13.04.2009 21:10
von Dr.Death
Hallo,

auch hier gilt:

Wenn du einen eigenen Cookie setzen möchtest, dann mache das vor dem redirect.... ansonsten kommt der gerade angemeldete User nie an Deinem Code vorbei ;-)

Re: Eigene Cookies nach anmeldung?

Verfasst: 14.04.2009 21:38
von kiew
dann gehts ja nicht mehr ^^ Sprich die Cookies werden nicht gesetzt.

Re: Eigene Cookies nach anmeldung?

Verfasst: 15.04.2009 23:46
von Ninos
jepp, so ist es, siehe meinen Beitrag ;)
Wäre nett, wenn uns da mal jemand helfen könnte, bin schon seit nem Monat am verzweifeln^^

Re: Eigene Cookies nach anmeldung?

Verfasst: 17.04.2009 10:20
von piero
Pflanzt doch das ganze direkt in die Funktion ein, die den User einloggt...?
Die Funktion heisst auth::login() und ist in der Datei includes/auth.php ;)

@kiew: Dir empfehl ich, wie Ninos mit Session-Variablen zu arbeiten, weil dieses Cookie kann sich jeder selbst setzen und ist dann beim index eingeloggt ;)

Re: Eigene Cookies nach anmeldung?

Verfasst: 17.04.2009 18:21
von Ninos
also du meinst, dass ich die auth.php Datei umändern sollte und nicht die ucp.php?

Re: Eigene Cookies nach anmeldung?

Verfasst: 17.04.2009 19:13
von Ninos
ich weis jetzt ned, nach welchem Befehl oder php-Code ich mein Code einfügen soll, wäre nett, wenn mir da jemand helfen könnte :)

Danke schonmals im Vorraus,
Ninos

Re: Eigene Cookies nach anmeldung?

Verfasst: 17.04.2009 20:07
von piero
Such doch ein wenig danach^^ Der phpBB-Code ist super lesbar ;)

Aber füg mal deinen Code mal nach diesen Zeilen ein:

Code: Alles auswählen

                // Successful session creation
                if ($result === true)
                { 

Re: Eigene Cookies nach anmeldung?

Verfasst: 17.04.2009 20:32
von Ninos
und wo mach ich dann den start sesson managment?
Ich muss ja die Variable $user wie abfragen.
Hab die ganz an den Anfang eingebaut, dann kommt aber ne Fehlermeldung:
Fatal error: Call to a member function session_begin() on a non-object in /mnt/web7/33/25/51806325/htdocs/includes/auth.php on line 20
Ach ja, und schon beim ersten

Code: Alles auswählen

                    // Successful session creation
                    if ($result === true)
                    { 
 
einbauen, gell?

Re: Eigene Cookies nach anmeldung?

Verfasst: 17.04.2009 23:25
von piero
Ninos hat geschrieben:Ach ja, und schon beim ersten
Also bei mir gibts die Stelle nur einmal...^^
Ninos hat geschrieben:und wo mach ich dann den start sesson managment?
Ich muss ja die Variable $user wie abfragen.
Hab die ganz an den Anfang eingebaut, dann kommt aber ne Fehlermeldung:
Stimmt, da ist dann ja immernoch der Gast-Account geladen... und an dieser Stelle nochmals alles neuzuladen bringts irgendwie nicht...^^
Vergiss, die Stelle^^

Sattdessen kannst du deinen Code in eine Funktion packen und diese Funktion bei erfolgreichem einloggen aufrufen.
Und zwar folgendermassen: (Habs zwar nicht getestet, sollte aber so funktionieren)

öffne: common.php
finde: Davor einfügen:

Code: Alles auswählen

$logio = request_var('logio', '');
if ($logio)
{
    log_login_logout($logio);
} 
öffne: includes/constants.php
finde:

Code: Alles auswählen

// Additional tables     
Danach einfügen:

Code: Alles auswählen

define('LOGIN_LOGOUT_TABLE',        $table_prefix . 'login_logouthistory'); 
öffne: includes/functions.php
finde:

Code: Alles auswählen

        if ($result['status'] == LOGIN_SUCCESS)
        {
            $redirect = request_var('redirect', "{$phpbb_root_path}index.$phpEx");
            $message = ($l_success) ? $l_success : $user->lang['LOGIN_REDIRECT'];
            $l_redirect = ($admin) ? $user->lang['PROCEED_TO_ACP'] : (($redirect === "{$phpbb_root_path}index.$phpEx" || $redirect === "index.$phpEx") ? $user->lang['RETURN_INDEX'] : $user->lang['RETURN_PAGE']);

            // append/replace SID (may change during the session for AOL users)
            $redirect = reapply_sid($redirect); 
Danach einfügen:

Code: Alles auswählen

            // set special cookie on the next page
            $redirect = $redirect . '&logio=login'; 
Finde: Davor einfügen:

Code: Alles auswählen

function log_login_logout($mode)
{
    if ($mode != 'login' AND $mode != 'logout')
        // evtl Sicherheitsmassnahmen gegen Missbrauch?
    {
        return false;
    }
     == 
    
    global $db, $user;
    
    $username; // was ist, wenn der Username sich ändert?
    $userid;   // Mit der Userid kanst du den Usernamen immer finden ;)
    $timestamp;
    $logindatum; // dasselbe wie $timestamp
    $ip;
    $from_site; // das wird immer ucp.php?mode=login sein
    $browser;
    $hoster; // <<---- Was ist das?^^
    
    $sql = 'INSERT INTO ' . LOGIN_LOGOUT_TABLE . 
        "(username, user_id, timestamp, datum, ip, from_site, browser, hoster, login_logout)
        VALUES
        ('$username', '$userid', '$timestamp', '$logindatum', '$ip', '$from_site', '$browser', '$hoster', '$mode')";
    $db->sql_query($sql);
} 
Du solltest noch deine Tabellenstruktur etwas überdenken, aber ansonsten sollte das ganze so funktionieren...
An der Funktion selbst musst du nicht mehr gross was verändern... Sie ist auch schon gerüstet fürs protokollieren des ausloggens ;)