webForumDet fria alternativet

Hjälp med sammalogin som Inkfish

PHPur PHP

8 svar · 383 visningar · startad av jockelw

jockelws avatarjockelwMedlem sedan sep. 200254 inlägg
Frågan#1

Jag har lite problem jag har gjort nästan exakt som inkfich eller va han hette men de funka ändå inte. Den går liksom förbi do_login.php men man får inte stanna på start.php utan den skicka en till sidan som man komma till om man inte ha anget lösen osv.

Ja skickar med hur mina sidor ser ut.

login.php

<form method="POST" action="do_login.php"> 
<table border=0>
<tr>
	<td><b>Användarnamn</b></td>
</tr>
<tr>
	<td>&nbsp;<input type="text" name="user" class=text></td>
</tr>
<tr>
	<td><b>Lösenord</b></td>
</tr>
<tr>
	<td>&nbsp;<input type="password" size=15 name="pass" class=text></td>
</tr>
<tr>
	<td>&nbsp;<input type="submit" name="Logga in!"></td>
</tr>
</table>
</form>

do_login.php

<?PHP

//do_login.php

//	include ("mysql.inc.php"); //Startar MySQL
$link = mysql_connect("localhost","XXX","XXX") or die ("Kan inte ansluta till databasen!");
mysql_select_db("test");
$user = $_POST["user"];
$pass = $_POST["pass"];

if (isset($user) && isset($pass)) {
    $query = "SELECT id, username FROM user WHERE username='$user' AND password=PASSWORD('$pass')";
    $res = mysql_query($query) or die ("Kan inte läsa från databasen!");
    $row = mysql_fetch_array($res);

    if (isset($row['id'])) {
       session_start();
      $uid = $row['id'];
      $uname = $row['username'];
      session_register("uid", "uname");

// NYTT 2 RADER
$HTTP_SESSION_VARS["uid"] = $row['id'];
$HTTP_SESSION_VARS["username"] = $row['username'];
        header("Location: start.php");   
    }
}
else {
    echo("Något blev fel.");
}
?>

start.php

<? 
    session_start();
    if (!isset($uid) || !isset($uname)) {
        header("Location: ../centerindex.php");
    }
?>
<html>
<head>
<title>Untitled Document</title>
</head>

<body>

Looking good.<br>
Welcome, <? print "$uname"; ?>

</body>
</html>

Någon kanske kan hjälpa mig. :)

DarrenMedlem sedan dec. 2002789 inlägg
#2

Hmmm... Det verkar som du behöver skicka sessionID till start.php när du anropar den. Det gör du på raden:

header("Location: start.php");

Ändra den så att den ser ut så här:

header("Location: start.php".SID);

SessionID skall du skica till alla sidor där du tänker använda dig av session variabler.

jockelws avatarjockelwMedlem sedan sep. 200254 inlägg
#3

Det funka inte ändå!!

Tack för svaret Darren men tyvärr så funkar det inte. ja funderar om de är någe fel på session registreringen eller om det är någe fel på koden som är först på start.php sidan. Någon som har en ide!!

Mattes avatarMatteMedlem sedan aug. 20002 975 inlägg
#4

Vilken PHP-version kör du och är register_globals On eller Off ?

Är du osäker på vilket kan du kolla upp det med
<?php phpinfo() ?>

jockelws avatarjockelwMedlem sedan sep. 200254 inlägg
#5

jag kör php 4.nånting och ja ha globala variablar på. så? ingen som vte va felet ligger. visst ska passwordet vara krypterat?

Mattes avatarMatteMedlem sedan aug. 20002 975 inlägg
#6

Ser inga direkta felaktigheter i din kod, dock är de två nya raderna onödiga.

För just sessioner kan PHP-versionen vara väsentlig. Skulle kunna slänga upp några varianter för att testa, men de hänger på vilken version du kör.
Har konstaterat i olika forum tidigare att det verkar vara problem med sessioner i PHP 4.2.2 (eventuellt var det möjligtvis 4.1.2).

En sak du kan kolla upp i inställningarna är att session.save_path leder till en existerande katalog och att skrivrättigheter är satta för denna katalog.

Under vissa förutsättningar kan man vara tvungen att föra med sig sessions-id i url-en. Då får man göra som Darren visade, förutom att du får lägga till det frågetecken han missade:

header("Location: start.php?".SID);

Kanske du har problem liknande de i denna länk: http://www.webforum.nu/showthread.php?s=&threadid=50025

DarrenMedlem sedan dec. 2002789 inlägg
#7

Tack Matte... Visst skall det vara frågetecken där. *skäms...* :r

Nexus86s avatarNexus86Medlem sedan okt. 20023 030 inlägg
#8

På mitt webbhotell räknas $uid som $_SESSION["uid"] men inte på min dator ÄVEN om jag har register_globals = On. Det är något som inte stämmer. Tror det är en bugg i php för Windows. På mitt webbhotell (som kör linux) räknas också $user som $_COOKIE["user"] men inte hemma. Förstår inte. Men prova detta får vi se om det fungerar:

login.php

<form method="POST" action="do_login.php"> 
<table border=0>
<tr>
    <td><b>Användarnamn</b></td>
</tr>
<tr>
    <td>&nbsp;<input type="text" name="user" class=text></td>
</tr>
<tr>
    <td><b>Lösenord</b></td>
</tr>
<tr>
    <td>&nbsp;<input type="password" size=15 name="pass" class=text></td>
</tr>
<tr>
    <td>&nbsp;<input type="submit" name="Logga in!"></td>
</tr>
</table>
</form>

do_login.php

<?PHP

//do_login.php

//    include ("mysql.inc.php"); //Startar MySQL
$link = mysql_connect("localhost","XXX","XXX") or die ("Kan inte ansluta till databasen!");
mysql_select_db("test");
$user = $_POST["user"];
$pass = $_POST["pass"];

if (isset($user) && isset($pass)) {
    $query = "SELECT id, username FROM user WHERE username='$user' AND password=PASSWORD('$pass')";
    $res = mysql_query($query) or die ("Kan inte läsa från databasen!");
    $row = mysql_fetch_array($res);

    if (isset($row['id'])) {
       session_start();
      $uid = $row['id'];
      $uname = $row['username'];
      session_register("uid", "uname");

// NYTT 2 RADER
$HTTP_SESSION_VARS["uid"] = $row['id'];
$HTTP_SESSION_VARS["username"] = $row['username'];
        header("Location: start.php");   
    }
}
else {
    echo("Något blev fel.");
}
?>

start.php

<? 
    session_start();
    if (!isset($HTTP_SESSION_VARS["uid"]) || !isset($HTTP_SESSION_VARS["uname"])) {
        header("Location: ../centerindex.php");
    }
    $uname = $HTTP_SESSION_VARS["uname"];
    $uid = $HTTP_SESSION_VARS["uid"];
?>
<html>
<head>
<title>Untitled Document</title>
</head>

<body>

Looking good.<br>
Welcome, <? print "$uname"; ?>

</body>
</html>

Om du kör PHP 4.1 eller nyare kan du byta ut $HTTP_SESSION_VARS["namn"] mot $_SESSION["namn"]. Skillnaden vet jag inte. Kommer inte ihåg. ;)

//edit: en liten felskrivning.. ;)

Nexus86s avatarNexus86Medlem sedan okt. 20023 030 inlägg
#9

Nu när jag tittar igen upptäckte jag just en sak. I do_login.php så sätter du sessionvariabeln till $HTTP_SESSION_VARS["username"] men i start.php till "uname". Dessa ska väl iallafall vara samma? :)

133 ms totalt · 3 externa anrop · v20260731065814-full.58439ac5
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)