Session-Problem im IE7

Radhad

Erfahrenes Mitglied
Hi zusammen,

ich habe ein Loginscript überarbeitet. Ab sofort wird zu jedem User eine eindeutige SessionID in der Datenbank gespeichert. Diese wrid auch beim Login wieder gesetzt. Das Problem: im Firefox 2.0 klappt dies wunderbar. Im IE7 wird die SessionID nicht übernommen nach header("Location: "...);.

Hier mal das Script:
PHP:
<?php  
// Datenbankverbindung aufbauen  
include("../config.php"); 
session_start();

$name  = $_REQUEST["username"];
$pw = $_REQUEST["password"];
$urlid = $_REQUEST["urlid"];

$sql = "SELECT * FROM users WHERE username='".mysql_real_escape_string($name)."'";
$sql_result = mysql_query($sql) or die("Error: ".mysql_error()); 

if(mysql_num_rows($sql_result) > 0)
{   
	// Benutzerdaten in ein Array auslesen.
	$data = mysql_fetch_assoc($sql_result);
	if($data["Password"] == md5($pw))
	{
		if($data["SessionID"] == NULL)
		{
			$newsession = false;
			do
			{
				$newsession = session_regenerate_id();
				if($newsession == true)
				{
					$sql = "SELECT sessionid FROM users WHERE sessionid = '".session_id()."'";
					$checksession = mysql_query($sql) or die("Error: ".mysql_error());
					if(mysql_num_rows($checksession) > 0)
					{
						$newsession = false;
					}
				}
			}
			while($newsession == false);
			
			$sql = "UPDATE users SET sessionid = '".session_id()."' WHERE userid = ".$data["UserID"];
			mysql_query($sql) or die("Error: ".mysql_error());
		}
		else
		{
			session_id($data["SessionID"]);
		}
		// Sessionvariablen erstellen und registrieren   
		$_SESSION["user_id"] = $data["UserID"];
		$_SESSION["username"] = $data["Username"];
		
		echo session_id();
			
		header ("Location: ".$urlid);
	} 
	else
	{
		header ("Location: ../index.php?main=fehler&id=1");
	}
}
else
{
	header ("Location: ../index.php?main=fehler&id=999");  
} 
?>
Weiß jemand woran das beim IE7 liegt?


Gruß Radhad
 
Hallo!

Wenn Du das Script über Localhost aufrufst (so ist es jedenfalls beim IE 5.5) oder Cookies deaktiviert sind, wird kein (Session-) Cookie gesetzt.
In dem Fall musst Du die Session per URL übergeben.

Gruss Dr Dau
 
Hmm... kann ich ihn dazu zwingen? *g*

Ich mache das kleine Projekt für ein lokales Intranet und es sollte schon mit allen Browsern klappen.
 
Lokales Intranet ist nicht mit Lokalhost zu vergleichen.
Wenn Das Script (bzw. der Server) auf Rechner A läuft und Du es von Rechner B aufrufst, dann sollte es funktionieren (es sei denn dass Coockies deaktiviert sind).
Wenn das Script aber auf Rechner A läuft und Du es auch von Rechner A mit Lokalhost aufrufst (http://localhost/deine_seite.php), dann setzt der IE kein Coockie.

Du kannst mittels (wenn ich es richtig im Kopf habe):
PHP:
header("Location: index.php?".SID)
die Session übergeben.
Damit die Session aber nicht unnötig per URL übergeben werden muss, würde ich zuerst testen ob Coockies akzeptiert werden und von dem Ergebnis abhängig machen ob die Session an die URL angehängt werden soll oder nicht.

[edit]
Da Du ja per header() weiterleitest, kannst Du Dir
PHP:
echo session_id();
sparen.
Wenn Du das lesen könntest, solltest Du über einen leistungsfähigeren Server nachdenken. ;)
[/edit]
 
Zuletzt bearbeitet:
PHP:
echo session_id();
War nur ein Test, ob der IE auch die neue SessionID annimmt. Das macht er auch brav, aber er behält sie nicht :/. Zumindest nicht lokal! ICh teste es mal aus einer VM aus ;)

EDIT:
Jetzt geht es im Firefox 2.0 auch nicht mehr ^^
 
Zuletzt bearbeitet:
Zur VM kann ich nichts sagen..... habe ich noch nie mit gearbeitet.
Aber warum rufst Du das Script nicht einfach über die IP (192.168.x.x) des Rechners auf?
Dann nimmt der IE nämlich die Cookies an. ;)
Dann kannst Du Dir auch die Arbeit mit der Sessionübergabe ersparen..... Cookies dürfen dann aber nicht deaktiviert sein..... da es aber ja ein internes Projekt wird, dürfte es kein Problem sein. ;)
 
Hmm... ok, aber jetzt kann ich mich garnicht mehr einloggen ^^

Also ich geh über http://192.168.1.1 (mein PC) aber in beiden Fällen wird die SessionID im Login-Script gesetzt aber nicht für den Rest der Seite übernommen ^^

Hier nochmal das Script:
PHP:
<?php  
session_start();
// Datenbankverbindung aufbauen  
include("../config.php");

$name  = $_REQUEST["username"];
$pw = $_REQUEST["password"];
$urlid = $_REQUEST["urlid"];

$sql = "SELECT userid, username, sessionid, password FROM users WHERE username='".mysql_real_escape_string($name)."'";
$sql_result = mysql_query($sql) or die("Error: ".mysql_error()); 

if(mysql_num_rows($sql_result) == 1)
{   
	// Benutzerdaten in ein Array auslesen.
	$data = mysql_fetch_assoc($sql_result);
	if($data["password"] == md5($pw))
	{
		if($data["sessionid"] == NULL)
		{
			$newsession = false;
			do
			{
				$newsession = session_regenerate_id();
				if($newsession == true)
				{
					$sql = "SELECT sessionid FROM users WHERE sessionid = '".session_id()."'";
					$checksession = mysql_query($sql) or die("Error: ".mysql_error());
					if(mysql_num_rows($checksession) > 0)
					{
						$newsession = false;
					}
				}
			}
			while($newsession == false);
			
			$sql = "UPDATE users SET sessionid = '".session_id()."' WHERE userid = ".$data["userid"];
			mysql_query($sql) or die("Error: ".mysql_error());
		}
		else
		{
			session_id($data["sessionid"]);
		}
		// Sessionvariablen erstellen und registrieren   
		$_SESSION["user_id"] = $data["userid"];
		$_SESSION["username"] = $data["username"];
		
		header ("Location: ".$urlid);
	} 
	else
	{
		header ("Location: ../index.php?main=fehler&id=1");
	}
}
else
{
	header ("Location: ../index.php?main=fehler&id=999");  
} 
?>
Es läuft ohne Fehler durch! Durch Ausgabe-Tests in dem Script erkenne ich auch keine Fehler! Nur die SessionID wird nicht mehr übernommen (plötzlich).
 
Ok, ich bekomm den Login nun garnicht mehr hin. Das Script läuft ohne Fehler durch und weder per IP nopch per Localhost kann ich mich einloggen.
 
Hmm, komisch.
Kommentiere doch mal die header() aus und lasse Dir dafür die Werte von $_SESSION ausgeben.
 
Array ( [user_id] => 1 [username] => Radhad )

SessionID ist aus der Tabelle Users und wurde korrekt übernommen.
Beim redirect nimmt der Browser trotzdem wieder die alte SessionID.
 
Zurück