Session IDs

Also leute, ganz dumm bin ich au nicht... und das funzt nicht. Jetzt geb ich euch mal meine Tabellen Struktur und dann den code, und dann will ich sehn ob des bei euch geht, könnt ihr das ma testen?

PHP:
<?php 
session_start(); 
?> 
<?php 
$host = "localhost"; 
$user = "xx"; 
$pw = "xx"; 
$db = "xx"; 

$conn = mysql_connect($host,$user,$pw); 
mysql_select_db($db,$conn); 

$userProfile = mysql_fetch_array(mysql_query("SELECT * FROM zugriff WHERE id = '$userid'")); 

echo $userProfile[spaltenname]; 



mysql_close($conn); 

?>

Dumb:

# phpMyAdmin MySQL-Dump
# version 2.3.0-rc4
# http://phpwizard.net/phpMyAdmin/
# http://www.phpmyadmin.net/ (download page)
#
# Host: localhost
# Erstellungszeit: 31. August 2002 um 21:54
# Server Version: 3.23.51
# PHP-Version: 4.2.1
# Datenbank: `sonicks`
# --------------------------------------------------------

#
# Tabellenstruktur für Tabelle `zugriff`
#

DROP TABLE IF EXISTS zugriff;
CREATE TABLE zugriff (
id int(11) NOT NULL auto_increment,
name varchar(20) NOT NULL default '',
pass varchar(20) NOT NULL default '',
level tinyint(4) NOT NULL default '0',
email varchar(255) NOT NULL default '',
hp varchar(255) NOT NULL default '',
herkunft varchar(255) NOT NULL default '',
icq varchar(255) NOT NULL default '',
hobbies varchar(255) NOT NULL default '',
signatur varchar(255) NOT NULL default '',
geschlecht varchar(255) NOT NULL default '',
aim varchar(255) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;
 
nach diesem Post weigere ich mich, weiter auf diesem thread zu antworten. Ich meine, schau doch einfach mal meinen letzten Post an, da steht die Antwort. Und etwas nachdenken gehört zum programmieren immer dazu. Und wenn ich schon sage, dass spaltenname ein Platzhalter für eigene Einsetzungen ist, NÄMLICH DEN NAMEN DEINER SPALTEN IN DEINER MYSQL TABELLE, und du das nicht verstehen willst, kann ich dir einfach net helfen. Wie sollte ich auch...Ich kann nämlich dein Problem net mehr nachvollziehen und komm mir langsam verarscht vor.

Ciao, F.o.G.
 
probiers doch erstmal aus... ich weiß das man da [name] hinsetzen muss... ich hab das nur hier reinkopiert. Aber alles was DU mir bist jetzt hier gebracht hast, hat nicht geklappt . Probiers doch. Nungut...

cya
 
ich weiß nich ob es einen unterschied macht
aber statt
PHP:
echo $userProfile[spaltenname]; 
//vielleicht
echo $userProfile["spaltenname"];
???
 
sonicks: ich hatte wirklich gedacht, du hast da spaltenname in deinem Script stehen :) .

Es wäre hilfreich, wenn du genau postest, was passiert. Bleibt der Bildschirm leer? Dann ist die Session nicht gestartet. Gibt es einen Fehler? Dann poste ihn, damit wir das ganze auseinander nehmen können. Kannst du zu deinem obigen Post auch noch das Login Script posten?

[After Post]
Ach ja, ohne Login Script kennt das Programm den User net. Es wird zwar eine Session gestartet, aber man kann aus der DB keinen User auslesen, weil $userid leer ist. Da die Session ID hier nicht übergeben wurde, wird eine komplett neue Session gestartet.
[/After Post]

SepteraCore: eigentlich sollte man Array's die Schlüssel immer quoten, aber es geht auch ohne. Sehr hilfreich wenn man in einem MySQL Query mit array's arbeitet, da man dann nicht immer das hier machen muss:
"SELECT * FROM tabelle WHERE spalte = '".array['test']."'"
Es reicht dann halt einfach nur spalte = 'array[test]'

Da man das besser lesen kann, nehm ich fast immer die Variante.

Ciao, F.o.G.
 
Zuletzt bearbeitet:
So, ich habe ein Login Script für deine Tabelle geschrieben was sich dann selber prüft. Es funktioniert, ich habs gestestet.

index.php -> Login Formular:

PHP:
<?php 
$host = "localhost"; 
$user = ""; 
$pw = ""; 
$db = "test";
$conn = mysql_connect($host,$user,$pw); 
mysql_select_db($db,$conn);

// wenn login gesetzt wurde, ist das Login Script durchlaufen worden
if(isset($_POST[login])) {

	if(empty($_POST[pass]) or empty($_POST[user])) {
		// wenn kein Passwort oder Name gesetzt wurden, dann ist ein Fehler vorhanden
		$error = true;
	} else {
		// Wenn dagegen ein Name gesetzt wurde, der in der DB net vorkommt, ist ebenfalls ein Fehler da
		$user = $_POST[user];
		$chk = mysql_query("SELECT * FROM zugriff WHERE name='$user'");
		if(!$chk) {
			$error = true;
		}	
	}
	
	if(!$error) {
		// wenn keinn Fehler, dann Passwortcheck
		if($chk) {
			$chk = mysql_fetch_array($chk);
			$chkpass = $chk["pass"];
			$chkuser = $chk["name"];
			trim($pass);
			trim($chkpass);
			if($pass == $chkpass AND $chkuser == $user) {
				// wenn Passwort ok, auslesen der Userid
				$userid = $chk["id"];
				// Starten der session
				session_start();
				// Anmeldung der Userid als Sessionvariable
				session_register("userid");
				// Weiterleitung auf die Scripte mit Inhalt
				header("Location: main.php?".SID);
			} else {
				// Ansonsten passiert nichts, das Login Formular erscheint wieder
				$chkpass = false;
			}
		}
	}
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title>Login Test</title>
</head>
<link rel="stylesheet" href="style.css" type="text/css">
<body>
<br>
<form action="index.php" method="POST">
	<table width="298" align="center" cellpadding="0" cellspacing="1" border="0" bgcolor="#000000">
		<tr>
			<td bgcolor="#DDDDDD" colspan="2">
				<table cellpadding="2" cellspacing="1">
					<tr>
						<td class="text">
							Login
						</td>
					</tr>
				</table>
			</td>
		</tr>
		<tr bgcolor="#FFFFFF">
			<td class="text">
				<table border="0" cellpadding="2" cellspacing="0" width="100%">
					<tr>
						<td class="text"><input type="hidden" name="login" value="1"> Name:</td>
						<td class="text">
							<input type="text" name="user" class="htmlform" style="width: 100; height: 18;">
						</td>
					</tr>
					<tr bgcolor="#FFFFFF">
						<td class="text">Passwort:</td>
						<td class="text">
							<input type="password" style="width: 100; height: 18;" class="htmlform" name="pass" size=10/>
						</td>
					</tr>
					<tr bgcolor="#FFFFFF"><td>&nbsp;</td><td align="left"><input type="submit" class="htmlform" value="Go!" /></td></tr>
				</table>
			</td>
		</tr>
	</table>
</form>

main.php -> Das, was nur per Login erreicht werden darf

PHP:
<?php 
session_start();

$host = "localhost"; 
$user = ""; 
$pw = ""; 
$db = "test";
$conn = mysql_connect($host,$user,$pw); 
mysql_select_db($db,$conn);

// bur wenn die Sessionvariable userid existiert, dann ist ein erfolgreicher Login durchgeführt worden
$userid = $HTTP_SESSION_VARS[userid];
if(!empty($userid)) {
	// Ausgabe des Inhalts, sicher vor unberechtigten Blicken
	$userProfile = mysql_fetch_array(mysql_query("SELECT * FROM zugriff WHERE id = '$userid'")); 
	
	echo $userProfile[name]." - ".$userProfile[email];
	mysql_close($conn); 
} else {
	// Hier kann man wieder zum Login Script zurückleiten, oder den Falscheinlogger ärgern *G*
	echo "Ätsch";
}
?>

musst natürlich die DB Daten wieder verändern

Ciao, F.o.G.
 
Zuletzt bearbeitet:
So ... deins klappt ! Ich danke dir für alles , für die mühen etc. Kann dich nur weiterempfehlen, au wenns bissel streitigkeiten gab ;)
 
Also ich will mich ja nicht einmischen in eure Diskussion:-) .

Ne mal ehrlich. eine Frage hab ich noch. wenn ich per URL die Sessionid übergebe wie bei tutorials.de dann darf ich di doch nicht verändern sonst funzt es nicht mehr. Ich hab vorher mit Cookies gearbeitet aber umgestellt auf ne Session. Ich kann bei mir die ID änder von d985138f78b8cb4a43eed21ed8592e23 nach blablabvla ändern und es geht trotzdem alles. Hab ich was falsch gemscht oder was vergessen?

PS: Der Thread ist total unübersichtlich. Ich weiß nicht ob diese Frage schon gestellt wurde. Wenn ja bitte ich um entschuldigung und vieleicht sogar um eine Antwort. Also nicht aufregen. :-) :-) :-)
 
Also ... Fog, ich will ja wirklich nicht nerven. Es tut mir auch leid und es kotzt mich an das ich zu dumm bin es selber zu schaffen, aaaaaaaaaaber:

Ich kann deine Version nicht in mein projekt einbinden, da ich sonst zu viel in anderen Dateien umändern müsste. Also ich hab dir jetzt mal mein login script hier:

PHP:
<?php
    session_start();
    include('var.inc.php');
    
    if ((!isset($username)) OR (!isset($passwort)))
    {
        die ("Du hast keinen Namen oder PW angegeben!");
    }

    $conn = @mysql_connect($dbserver,$dbuser,$dbpass);

    if (!$conn)
    {
        die ("Sorry, Verbindungsversuch zur Datenbank ist fehlgeschlagen !");
    }

    mysql_select_db($dbname,$conn);
    $query = "SELECT pass, level FROM zugriff WHERE name = '".$username."'";
    $result = mysql_query($query,$conn);
    $result = mysql_query("SELECT pass, level FROM zugriff WHERE name = '$username'",$conn);
    $zeileholen = mysql_fetch_array($result,MYSQL_ASSOC);
    mysql_close($conn);

    if (!$zeileholen)
    {
        die ("Sorry, aber dieser Name ist nicht registriert");
    }

    if ($zeileholen["pass"] <> $passwort)
    {
        die ("Sorry, aber dieses Passwort passt nicht zum Namen!");
    }

    $level = $zeileholen["level"];
	$sessid = session_id();  
	

    session_register('username');
    session_register('level');
	session_register('sessid');
	session_register('zaehler');
    header ("Location:./logged/check.php");
?>
<html>

Jetzt hab ich probier das mit dem Profil auslesen umzuschreiben... und zwar so :

PHP:
<?php
session_start();
?>
<?php 
$host = "localhost"; 
$user = "yy"; 
$pw = "<<"; 
$db = "y"; 

$conn = mysql_connect($host,$user,$pw); 
mysql_select_db($db,$conn);

$userProfile = mysql_fetch_array(mysql_query("SELECT * FROM zugriff WHERE id = '$sessid'"));  

echo ".userProfile[name]."; 
 

mysql_close($conn); 

?>

Wie müsste der jetzt aussehen? Bzw. der obere login code damit es auch klappt, ich hab jetzt auch gepeilt das ich was vergessen habe bei der session zu "registrieren" aber was? !
 
also du kannst die Sessid nicht zum abfragen aus der Datenbank nehmen, da die Session ID und die ID des Users nichts miteinander zu tun haben.

Wenn du den einloggenden User authentisiert hast, musst du seine ID auslesen, und diese registrieren.

Guck dir mal mein Script an. In der index.php hab ich irgendwo im hinteren PHP Teil die Userid definiert. Die Sessionid hab ich nirgendwo definiert, weil mans net braucht (es gibt ja die SID Konstante).

Ich würde auch empfehlen, das Login Script auszulagern. In den Folgeseiten kann man ganz beruhigt das Script starten lassen. Man muss nur checken, ob die UserID gesetzt ist, denn die kann nur im dann gesetzt worden sein, wenn der User das Login Script passiert hat.

DerZeus: hast du die SessionID ausgelesen und als Variable an die URL's angehangen? PHP nutzt per default das Cookie System. Wenn nun in einem Cookie eine Session ID steckt, und in der URL ebenfalls, dann nimmt PHP lieber die ID im Cookie, weil es wahrscheinlicher ist, dass diese nicht manipuliert ist.

Stell einfach mal deine Cookies ab und teste es noch mal. Wenn es dann immer noch klappt, ist was mit deiner Authentisierung falsch gelaufen und jeder kann rein :)

Ciao, F.o.G.
 
Zurück