Probleme mit Sessions !



  • Hi,

    Also, ich glaub ich hol jetzt gleich den Strick und mach meinem Leben ein Ende!

    Entweder mangelt es mir an Gerhirnzellen oder was weiß ich 🙂

    Also ich Hab ein Login-Script. Ich prüfe an einer Stelle ob Password/Username richtig ist.
    Falls alles richtig registier ich eine Variable "member_id" und speicher die Id, und alles klappt !

    Führ ich aber eine funktion aus, welche den gleichen code enthält, wird zwar die Variable gespeichert, jedoch nicht der Wert "1" gespeichert !!!!!

    Bitte erklährt mir WARUM ??

    CODES:

    Ohne Funktion:

    // prüfe ob ein nickname und password angegeben wurde
    if( strlen( $_POST['login_name'] ) > 0 &&
    	strlen( $_POST['login_password'] ) > 0  &&
    	!$g_bLogged )
    {
    	$bAdmin = false;
    
    	// wurde ein admin-logingesetzt ?
    	if( Isset( $_POST['login_check_admin'] ) ) $bAdmin = true;
    
    	# überprüfe user-daten
    	//$iLoginResult = $g_cLogin->TryLogin( $_POST['login_name'], $_POST['login_password'], $bAdmin );
    
    	$member_id = 1;
    	if( !CSession::IsRegisteredVar( "member_id" ) ) CSession::RegisterVar( "member_id" );
    	else $_SESSION['member_id'] = $member_id;
    
    ....
    

    Mit Funktion:

    function test()
    {
    	$member_id = 1;
    	if( !CSession::IsRegisteredVar( "member_id" ) ) CSession::RegisterVar( "member_id" );
    	else $_SESSION['member_id'] = $member_id;
    
    }
    
    // prüfe ob ein nickname und password angegeben wurde
    if( strlen( $_POST['login_name'] ) > 0 &&
    	strlen( $_POST['login_password'] ) > 0  &&
    	!$g_bLogged )
    {
    	$bAdmin = false;
    
    	// wurde ein admin-logingesetzt ?
    	if( Isset( $_POST['login_check_admin'] ) ) $bAdmin = true;
    
    	# überprüfe user-daten
    	//$iLoginResult = $g_cLogin->TryLogin( $_POST['login_name'], $_POST['login_password'], $bAdmin );
    
    	test();
    
    ....
    

    Naja ich hoffe mir kann da vielleicht jemand weiterhelfen!

    Cu



  • Geht er in den if oder in den else Zweig? Was machst du in CSession::RegisterVar?



  • ich führe einfach die funktionen aus:

    <?PHP
    # ================================== Copyright  © 2004 Cenetix-Dev, All rights reserved. =========================
    #
    #
    # Purpose:
    # ================================================================================================================
    
    # -[ defines ]-
    
    # -[ class ] -
    class CSession
    {
    	# -[ variables ]-
    
    	# -[ functions ]-
    
    	//-------------------------------------------------------------------------------
    	// Purpose: constructor
    	// Output :
    	//-------------------------------------------------------------------------------
    	function CSession ()
    	{
    	}
    
    	//-------------------------------------------------------------------------------
    	// Purpose: 
    	// Output :
    	//-------------------------------------------------------------------------------
    	function Start()
    	{
    		return session_start();
    	}
    
    	//-------------------------------------------------------------------------------
    	// Purpose: 
    	// Output :
    	//-------------------------------------------------------------------------------
    	function GetId()
    	{
    		return session_id();
    	}
    
    	//-------------------------------------------------------------------------------
    	// Purpose: 
    	// Output :
    	//-------------------------------------------------------------------------------
    	function Destroy()
    	{
    		session_unset();
    
    		// destroy session
    		session_destroy();
    
    	}
    
    	//-------------------------------------------------------------------------------
    	// Purpose: 
    	// Output :
    	//-------------------------------------------------------------------------------
    	function RegisterVar( $var_name )
    	{
    		return session_register( $var_name );
    	}
    
    	//-------------------------------------------------------------------------------
    	// Purpose: 
    	// Output :
    	//-------------------------------------------------------------------------------
    	function UnregisterVar( $var_name )
    	{
    		return session_unregister( $var_name );
    	}	
    
    	//-------------------------------------------------------------------------------
    	// Purpose: 
    	// Output :
    	//-------------------------------------------------------------------------------
    	function IsRegisteredVar( $var_name )
    	{
    		return session_is_registered( $var_name );
    	}
    
    	//-------------------------------------------------------------------------------
    	// Purpose: 
    	// Output :
    	//-------------------------------------------------------------------------------
    	function GetCookieParams()
    	{
    		return session_get_cookie_params();
    	}
    
    };
    
    ?>
    


  • Hi,

    was bringt mir das, wenn ich ein "@" for eine session funktion setzte ?

    Bye



  • Mit "@" kannst du die Ausgabe einer Fehlermeldung der Funktion unterbinden.
    Das ist nützlich, wenn du eine eigene oder gar keine Meldung ausgeben willst.



  • Man sollte nicht session_register und $_SESSION in Kombination verwenden - steht zumindest so in der PHP-Doku 🕶



  • Aha, und wie soll ich deiner Meinung das ganze sonst machen ?

    Also ich hab den Code ein bisschen geändert und funktioniert jetzt,
    aber ich hab die kombination ! ?

    // register data in session
    		if( !CSession::IsRegisteredVar( "member_id" ) )  CSession::RegisterVar( "member_id" );
    		if( !CSession::IsRegisteredVar( "is_admin" ) )  CSession::RegisterVar( "is_admin" );	
    
    		$_SESSION['member_id'] = $member_id;
    		$_SESSION['is_admin'] = $is_admin;
    


  • einfach die if's ganz weglassen 😉
    Wobei ich eher nicht denke, dass das etwas mit dem eigentlichen Problem zu tun hat 🤡



  • flenders schrieb:

    einfach die if's ganz weglassen 😉
    Wobei ich eher nicht denke, dass das etwas mit dem eigentlichen Problem zu tun hat 🤡

    Wenn ich das tute kommt ein Fehler, dass die daten schon gesendet worden sind 🙂



  • Bei was kommt das dann 😕

    Mit if-Weglassen meinte ich natürlich das ganze, also das hier:

    if( !CSession::IsRegisteredVar( "member_id" ) )  CSession::RegisterVar( "member_id" ); 
    if( !CSession::IsRegisteredVar( "is_admin" ) )  CSession::RegisterVar( "is_admin" );
    


  • Wird das dann automatisch in den Sessions gespeichert ? !! ?

    Wenn ich nur die Werte in $_SESSIONS speicher ?



  • Ja, und in der Doku steht auch:

    Wenn Sie $_SESSION (oder $HTTP_SESSION_VARS) verwenden, sollten Sie nicht session_register(), session_is_registered() und session_unregister() verwenden.


Anmelden zum Antworten