webForumDet fria alternativet

Modifierat system

23 svar · 272 visningar · startad av oelbal

oelbalMedlem sedan jan. 20014 973 inlägg
#1

Jag försöker göra ett loginsystem med hjälp av en MySQL databas och sessions.
Delar av koden är modifierad från sgtpeppers psphplogin, så han kanske är rätt person att svara på detta?

Här är min loginsida, login.php:

<?
$database = @mysql_connect("XXXXX","XXXXX","XXXXXX");
if (!$database) {
        echo("An error occured. Please contact the administrator.");
        exit();
}
if (!@mysql_select_db("XXXXX")) {
        echo("An error occured. Please contact the administrator.");
        exit();
}

if (isset($loginuser) && isset($loginpass)) {
    $query = "SELECT id, name FROM user WHERE name='$loginuser' AND pass=PASSWORD('$loginpass')";
    $res = mysql_query($query);
    $row = mysql_fetch_array($res);
    if (isset($row['id'])) {
        session_start();
        $uid = $row['id'];
        $uname = $row['name'];
        session_register("uid","uname");
        Header("Location: xxxxx.php");
    }
}
?>
<html>
<head>
<title>Users and Administrators Login</title>
</head>

<body>

<form action="login.php" method="post">
Username:<br>
<input type="text" size="20" name="loginuser"><p>

Password:<br>
<input type="password" size="20" name="loginpass"><p>

<input type="submit" value="&nbsp;Login&nbsp;">
</form>

</body>
</html>

Här är databasen XXXXX med tabellen users struktur och data:

#
# Table structure for table 'user'
#

CREATE TABLE user (
   id int(11) NOT NULL auto_increment,
   name varchar(50) NOT NULL,
   pass varchar(50) NOT NULL,
   PRIMARY KEY (id),
   UNIQUE id_2 (id),
   KEY id (id)
);

#
# Dumping data for table 'user'
#

INSERT INTO user VALUES ( '1', 'joel', 'xxxx');
INSERT INTO user VALUES ( '2', 'per', 'xxxxx');

Detta är XXXXX.php, som man kommer till när man loggats in:

<?
session_start();
if (!isset($uid) &#0124;&#0124; !isset($uname)) {
     Header("Location: login.php");
}
?>
<html>
<head>
<title>blaha</title>
</head>

<body>

blaha blaha

</body>
</html>

Felet:
När användarens namn är kollat i databasen är det alltså meningen att han skall skickas vidare till xxxxx.php (om rätt anv. & lösen skrivs in), men så blir inte fallet, för när jag testar så skickas jag alltid tillbaka till login.php, även om jag skriver in rätt?
Är det något fel i koden? Är det något jag har glömt? Är det totalt fel? :(

Någon som orkar avsätta några minuter för att analysera mitt problem?

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

patrickpollyMedlem sedan mars 2001190 inlägg
#2

Ändra följande kod i login.php så borde det fungera.

if (isset($row['id'])) {
        session_start();
        $uid = $row['id'];
        $uname = $row['name'];
        session_register("uid","uname");
        Header("Location: xxxxx.php");
    }

Till:

if (isset($row['id'])) {
        session_start();

// den här har bytt plats
  session_register("uid","uname");

        $uid = $row['id'];
        $uname = $row['name'];
                Header("Location: xxxxx.php");
    }

För övrigt bör du köra en bättre koll på sidan där du är inloggad. Det räcker med att jag en get-request med de variablerna satta till TRUE så är jag inloggad.

//Patrik

------------------
Patrik Lindgren - Alxnet AB
Alxnet.se - gratis webbverktyg

sgtpepperMedlem sedan apr. 20007 588 inlägg
#3

När man rådfrågar PHP-manualen så sägs det ingenting om att man måste registrera variabeln innan man sätter den och det funkar utmärkt att göra det tvärtom på mitt system så det kan ju vara något annat problem.

För övrigt bör du köra en bättre koll på sidan där du är inloggad. Det räcker med att jag en get-request med de variablerna satta till TRUE så är jag inloggad.

Ahh.. Pinsamt :) Jag får skylla på att jag slängde ihop koden rätt snabbt...

Ändra till detta istället (kollar så att variablerna är registrerade i sessionen) så bör säkerhetsnivån höjas lite högre än den tidigare sandlådenivån på mitt script :e

 /********************************************
	* Check to see that the user is logged in  *
	********************************************/
	session_start();
	if (!session_is_registered("uid") &#0124;&#0124; !session_is_registered("uid") &#0124;&#0124; !isset($uid) &#0124;&#0124; !isset($uname))
	{
		Header("Location: login.php");
	}

------------------
skaparen av allt som är mjukt och luktar lavendel

[Redigerat av sgtpepper den 01 jun 2001]

oelbalMedlem sedan jan. 20014 973 inlägg
#4

Tack pepparn & patrickpolly!

Nu kan jag sova lugnt inatt....

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

oelbalMedlem sedan jan. 20014 973 inlägg
#5

.......inte....

För det luktar fisk.....jag får det ändå inte att fungera......ARGH!

Nu har jag skummat igenom koden så många gånger att jag blir galen.....

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

sgtpepperMedlem sedan apr. 20007 588 inlägg
#6

Hur har du lagt in användarna i databasen? Lösenorden skall sparas krypterade med mySQLs PASSWORD()-funktion. Det kan vara så att du sparat dom i klartext och då överenstämmer dom inte.

Felet kan även uppstå om du har cookies avslagna i din webbläsare.

------------------
skaparen av allt som är mjukt och luktar lavendel

oelbalMedlem sedan jan. 20014 973 inlägg
#7

ojoj.....ibland så undrar man ju hur det står till uppe i barken....

Visst fan har jag lagt in det som klartext.......börjar väl bli trött....

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

sgtpepperMedlem sedan apr. 20007 588 inlägg
#8

Sånt händer även den bäste :)

------------------
skaparen av allt som är mjukt och luktar lavendel

oelbalMedlem sedan jan. 20014 973 inlägg
#9

ARGH! Tro fan att det blev fel iaf....

Jag krypterade lösenordet, men något går snett iaf.......

När jag loggar in, och skriver mitt användarnamn och lösenord, så kommer jag tillbaka till login.php iaf.......fast den enda skillnaden är att jag nu också får 2 warnings!

Warning: open(/tmp/sessions/sess_4ad9b169f54c5c62b91fcef4426b73b4, O_RDWR) failed: m (2) in /minsida/login.php on line 17

Warning: Cannot add header information - headers already sent by (output started at /minsida/login.php:17) in /minsida/login.php on line 21

och om jag sedan knappar in XXXXX.php så får jag dessa fel:

Warning: open(/tmp/sessions/sess_4ad9b169f54c5c62b91fcef4426b73b4, O_RDWR) failed: m (2) in /minsida/xxxxx.php on line 2

Warning: Cannot add header information - headers already sent by (output started at /minsida/xxxxx.php:2) in /minsida/xxxxx.php on line 4

Samma fel på både login.php & xxxxx.php alltså......humm....

Finns det någon som känner för att provköra systemet?

[Redigerat av oelbal den 02 jun 2001]

oelbalMedlem sedan jan. 20014 973 inlägg
#10

Något är skumt med sessionerna....

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

PMedlem sedan jan. 20012 204 inlägg
#11

kanske det gamla vanliga att man inte angett rätt sökväg till tmp mappen??!?!?

------------------
"Man kommer fortare fram till målet om man kryper åt rätt håll än springer åt fel håll"

oelbalMedlem sedan jan. 20014 973 inlägg
#12

Jag får nog ta och testa sgtpeppers grej direkt utan att modifiera den, och kolla om det fungerar, som att jag vet att det fungerar från början....

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

oelbalMedlem sedan jan. 20014 973 inlägg
#13

sgtpepper

Humm, jag testkörde psphplogin, utan att göra några andra förändringar i config'en (förutom de nödvändiga).......det fungerar ej.....

Först så registerar man sig, det går hur bra som hellst, ända tills man ombeds att logga in för första gången, då skiter det sig, för man kommer tillbaka till login.php igen.....och igen......och igen.......

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

[Redigerat av oelbal den 02 jun 2001]

oelbalMedlem sedan jan. 20014 973 inlägg
#14

ARGH!

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

sgtpepperMedlem sedan apr. 20007 588 inlägg
#15

Mysko, det funkar bra på min burk.

Lägg in lite spårutskrifter i koden för att underlätta felsökning.

Du kan även lägga till följande kod i login.php:

<?
	if(isset($email) && isset($pass))
	{
?>
		<font color="red">Felaktigt namn och/eller lösenord!</font>
<?
	}
?>

Lägg koden precis ovanför <form action="login.php" method="post"> i login.php. Om du efter ändringen får ett rött felmeddelande när du försöker logga in som säger "Felaktigt lösen osv." så är det något fel med användarnamn- och lösenordsmatchningen mot databasen. Om du inte får något sånt meddelande så betyder det att inloggningen funkat och att du skickats iväg till den låsta sidan, men att något skitit sig där och att du kastats tillbaka till login.php.

------------------
skaparen av allt som är mjukt och luktar lavendel

oelbalMedlem sedan jan. 20014 973 inlägg
#16

Jupp, jag fick upp den röda texten....

Plus 2 varningar, om sessions och headers....

Skall testa några saker med ditt script, och se om det fungerar....

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

oelbalMedlem sedan jan. 20014 973 inlägg
#17

Nu fick jag det att fungera!

Först började jag med att ta bort krypteringen, sedan tog jag bort sessionerna.....då fungerade det.....

När jag använder kryperingen blir inte lösenordet rätt, (ja, lösenorden är krypterade i databasen också), och sessionerna skapar en massa varningssignaler........

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

BatboyMedlem sedan jan. 20001 006 inlägg
#18

och sessionerna skapar en massa varningssignaler.......

Kontrollera php.ini så din session.save_path är korrekt. Med tanke på ovanstående felmeddelanden är den inte det. Kör du i windows bör det vara nåt liknande: c:/php/tmp

Att du fick "Cannot add header information" beror kanske på att PHP redan skrivit ut saker (felmeddelande session) och kan därför inte fortsätta med header().

/j

------------------
R6

oelbalMedlem sedan jan. 20014 973 inlägg
#19

Hemma får jag sessionerna att fungera, men inte på servern där jag har sidan...

------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

oelbalMedlem sedan jan. 20014 973 inlägg
#20

Ska kolla med de som har servern angående deras inställningar....

Problemet med krypteringen av lösenordet kvarstår dock.....konstigt...

[r] stavfel
------------------
Mina knäskålar klapprar fortfarande efter Kent-Mustafas trummsolo!

[Redigerat av oelbal den 03 jun 2001]

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