PHP-Interface für Browserspiel



  • Problem mit folgendem Code:

    <html>
    	<head>
    		<title>SimOD Interpreter</title>
    		<style type="text/css">
    			*{
    				margin: 0;
    			}
    			body
    			{
    				background-image: url(hintergrund.gif);
    			}
    			.command_line
    			{
    				position: fixed;
    				width: 100%;
    			}
    			.command_line_text
    			{
    				width: 100%;
    				background-image: url(hintergrund_2.gif);
    				border: 0;
    				color: white;
    			}
    		</style>
    		<script type="text/javascript">
    			function FocusOnInput()
    			{
    				document.getElementById("command_line").focus();
    			}
    		</script>
    	</head>
    	<body onload="FocusOnInput()">
    		<?php
    			$echo_text=explode("\r\n", stripslashes($_POST["previous_echo_text"]));
    			if(!$_POST["previous_echo_text"])
    			{
    				$echo_text=array();
    				$echo_text[]="";
    				$echo_text[]="<font color='red'>Bitte melden Sie sich mit /login USER PASSWORD an!</font>";
    			}
    			$command_line=stripslashes($_POST["command_line"]);
    			if($command_line)
    			{
    				$command_array=explode(" ", $command_line);
    
    				$echo_text[]="<font color='white'>".$command_line."</font>";
    				switch($command_array[0])
    				{
    					case "/login":
    						if(count($command_array)==3)
    						{
    							$postdata = http_build_query(array('username' => $command_array[1], 'passwort' => $command_array[2], 'op' => 'login', 'setworld' => 'int9'));
    							$opts = array('http' => array('method'  => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata));
    							$context = stream_context_create($opts);
    							$result = file_get_contents('http://www.omega-day.com/game/?setworld=int9', false, $context);
    							if(!$result) $echo_text[]="Datenübertragungsfehler.";
    							foreach(explode("<", $result) as $left) foreach(explode(">", $left) as $right)
    							{
    								if(trim($right)=="Fehlerhafter Benutzername oder Passwort!"||trim($right)=="Zeitlimit &uuml;berschritten oder nicht angemeldet.")
    								{
    									$echo_text[]="<font color='red'>Anmeldung gescheitert.</font>";
    									break 2;
    								}
    								if(trim($right)=="Willkommen in Omega-Day")
    								{
    									$echo_text[]="<font color='red'>Anmeldung erfolgreich.</font>";
    									break 2;
    								}
    							}
    						}
    						else $echo_text[]="<font color='red'>Ungueltige Parameterzahl!</font>";
    						break;
    					case "/cls":
    						$echo_text=array();
    						$echo_text[]="";
    						$echo_text[]="<font color='red'>Verlauf gel&ouml;scht.</font>";
    						break;
    					default:
    						$echo_text[]="<font color='red'>Ung&uuml;ltiges Kommando!</font>";
    						break;
    				}
    			}
    			$echo_text_imploded=implode("\r\n", $echo_text);
    		?>
    		<div class="command_line">
    			<form method='post' action='simod.php'>
    				<input class="command_line_text" type="text" id="command_line" name="command_line">
    				<?php
    					echo "<input type='hidden' name='previous_echo_text' value=\"$echo_text_imploded\">";
    				?>
    			</form>
    		</div>
    		<div class="echo_area">
    			<?php
    				foreach($echo_text as $line)
    				{
    					echo $line."<br>";
    				}
    			?>
    		</div>
    	</body>
    </html>
    

    Dies sollte ein Kommandozeileninterface für ein BG (Omega-Day) werden. Dieses verwendet jedoch Cookies für die Session-ID.

    Das Problem ist nun, dass mehrere Nutzer über das auf einem Server liegende Skript spielen sollen, aber dabei bei jedem Login das alte Cookie überschreiben und ohne Login im Account des anderen Nutzers spielen würden (sehe ich das richtig?).

    Kann man dafür eine Lösung finden, wie z.B. intern am Interfaceserver mehrere Cookies abzulegen und diese je nach Benutzer zu verwenden?



  • Ok hat sich erledigt, hab mich mal genauer informiert.

    Ich lese jetzt Cookies mit

    $game_cookie_names=array();
    $game_cookie_values=array();
    foreach($http_response_header as $s)
    {
        if(preg_match("|^Set-Cookie:\s*([^=]+)=([^;]+);(.+)$|",$s,$parts))
        {
            $game_cookie_names[]=$parts[1];
            $game_cookie_values[]=$parts[2];
        }
    }
    

    aus und sende sie im Header.^^


Anmelden zum Antworten