webForumDet fria alternativet

Hjälp med sammalogin som Inkfish

PHPur PHP

8 svar · 383 visningar · startad av jockelw

Medlem 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. :)

Medlem 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.

Medlem 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!!

Medlem 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() ?>

Medlem 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?

Medlem 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

Medlem sedan dec. 2002789 inlägg
#7

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

Medlem 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.. ;)

Medlem 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? :)

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