Avatar billede kgp43 Nybegynder
31. maj 2004 - 18:15 Der er 26 kommentarer og
1 løsning

Fejl i login system

Hejsa,

Jeg har en header fejl i mit login system.
Har lavet det sådan, at brugeren bliver sent til ligin.htm, hvis han/hun prøver at tilgå et beskyttet område af mit site.

Fejlen kan ses her: http://www.tackleprices.com/merchant/index.php


Koden der checker om brugeren er logged ind (på index.php):
---------------------------------------------
<?
session_start();

// check if the user info validates the db
include("/home/tacklepr/public_html/db.php");

$sql_doublecheck = mysql_query("SELECT * FROM merchants WHERE login_name='$login_name' AND password='$password' AND status_admin='1'");
$doublecheck = mysql_num_rows($sql_doublecheck);

if($doublecheck != 1) {
    include '/home/tacklepr/public_html/merchant/login.htm';
    exit();
}
?>


Koden på login.htm:
---------------------------------------------
Siden er ren html


Login Check (Skulle ikke have nogen inflydelse):
---------------------------------------------
<?
/* Check User Script */
session_start();  // Start Session
include("/home/tacklepr/public_html/db.php");

// Convert to simple variables
$username = $_POST['username'];
$password = $_POST['password'];

if((!$username) || (!$password)){
    echo "Please enter ALL of the information! <br />";
    include 'login.htm';
    exit();
}

// Convert password to md5 hash
$password = md5($password);

// check if the user info validates the db
$sql = mysql_query("SELECT * FROM merchants WHERE login_name='$username' AND password='$password' AND status_admin='1'");
$login_check = mysql_num_rows($sql);

if($login_check > 0){
    while($row = mysql_fetch_array($sql)){
    foreach( $row AS $key => $val ){
        $$key = stripslashes( $val );
    }
        // Register some session variables!
        session_register('id');
        $_SESSION['id'] = $id;
        session_register('login_name');
        $_SESSION['login_name'] = $login_name;
        session_register('merchant_name');
        $_SESSION['merchant_name'] = $merchant_name;
        session_register('password');
        $_SESSION['password'] = $password;
       
        mysql_query("UPDATE merchants SET last_login=now() WHERE id='$id'");
    }
} else {
    echo "You could not be logged in! Either the username and password do not match or you have not validated your membership!<br />
    Please try again!<br />";
    include 'login.php';
}
header("Location: index.php");
?>



- Kan ikke forstå hvorfor jeg får fejlen, da der ikke bliver sat noget header (så vidt jeg kan se).
Avatar billede Slettet bruger
31. maj 2004 - 18:20 #1
Du skal fjerne session_start() i login.htm når den inkludes i en side der allerede starter en session!
Avatar billede Slettet bruger
31. maj 2004 - 18:21 #2
session_start() sender bl.a en cookie, og derfor skal den stå før du sender noget andet information ;)
Avatar billede Slettet bruger
31. maj 2004 - 18:27 #3
login.php, mente jeg selvfølgelig ;)
Avatar billede kgp43 Nybegynder
31. maj 2004 - 18:28 #4
Der er ikke noget session_start() i login.htm
Avatar billede Slettet bruger
31. maj 2004 - 18:30 #5
Så vidt jeg kan se har du en uoverenstemmelse mellem index.php og header.php .. men da du har en login.php gættede jeg på det var dér fejlen lå.
Avatar billede kgp43 Nybegynder
31. maj 2004 - 18:31 #6
Og hvis jeg fjerner session_start() fra index.php, hvordan kan jeg så checke om ser er sat en session?
Avatar billede kgp43 Nybegynder
31. maj 2004 - 18:34 #7
Dette er mine sider:

Login.htm:
------------------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<style type="text/css">
body , html {
height: 100%;
margin: 0px;
padding: 0px;
}
</style>
<title>Tackleprices.com | Merchant Area</title>
<style type="text/css">
<!--
.left-frame {
    border-right-width: 1px;
    border-right-style: solid;
    border-right-color: #CCCCCC;
    padding-bottom: 5px;
}
.top-border {
    border-top-width: 1px;
    border-top-style: solid;
    border-top-color: #CCCCCC;
}
.register {
    border-bottom-width: 1px;
    border-bottom-style: solid;
    border-bottom-color: #CCCCCC;
    padding-top: 5px;
}
.bottom-border {
    border-bottom-width: 1px;
    border-bottom-style: solid;
    border-bottom-color: #CCCCCC;
}
-->
</style>
</head>

<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="200" align="center" valign="bottom" bgcolor="#EFEFEF" class="left-frame"><font color="#000000" size="1" face="Verdana, Arial, Helvetica, sans-serif">&copy;
      2004, Tackleprices.com</font></td>
    <td valign="top">
    <form name="form1" action="login_check.php" method="post">
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td height="60" colspan="4">&nbsp;</td>
        </tr>
        <tr>
          <td width="30" height="30" align="center" class="top-border">&nbsp;</td>
          <td width="120" height="30" align="center" class="top-border">&nbsp;</td>
          <td height="30" colspan="2" valign="bottom" class="top-border">&nbsp;</td>
        </tr>
        <tr>
          <td width="30" height="110" rowspan="2" align="center" valign="bottom">&nbsp;</td>
          <td width="120" height="110" rowspan="2" align="center" valign="bottom"><img src="/img/login.gif" width="97" height="105"></td>
        </tr>
        <tr>
            <td height="110" colspan="2" valign="bottom" class="leftspan"><font color="#006393" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>Tackleprices
              | Merchant Area</strong></font><br>
          <font size="2" face="Verdana, Arial, Helvetica, sans-serif">Enter your username and password to login</font><br> <img src='/img/break_CCCCCC.gif' width='400' height='1' vspace='8'></td>
        </tr>
          <tr>
            <td width="30" rowspan="4" align="center" valign="top" class="register">&nbsp;</td>
            <td width="120" rowspan="4" align="center" valign="top" class="register">[ <a href="/merchant/add.php"><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#990000">Register</font></a> ]</td>
            <td width="93" height="25" class="leftspan"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Username:</font></td>
            <td width="826" height="25">
              <input type="text" name="username" class="form1">
            </td>
          </tr>
          <tr>
            <td height="30" valign="middle" class="leftspan"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Password</font>:</td>
            <td height="30" valign="middle"> <input type="password" name="password" class="form1">
            </td>
          </tr>
        <tr>
            <td height="30" valign="top">&nbsp;</td>
          <td height="30" valign="bottom"> <input type="submit" name="Submit" value="Login"></td>
        </tr>
        <tr>
          <td height="30" colspan="2" class="bottom-border">&nbsp;</td>
        </tr>
      </table>
      </form>
    </td>
  </tr>
</table>
</body>
</html>


login_check.php:
------------------------------------------------------------------------------------
<?
/* Check User Script */
session_start();  // Start Session
include("/home/tacklepr/public_html/db.php");

// Convert to simple variables
$username = $_POST['username'];
$password = $_POST['password'];

if((!$username) || (!$password)){
    echo "Please enter ALL of the information! <br />";
    include 'login.htm';
    exit();
}

// Convert password to md5 hash
$password = md5($password);

// check if the user info validates the db
$sql = mysql_query("SELECT * FROM merchants WHERE login_name='$username' AND password='$password' AND status_admin='1'");
$login_check = mysql_num_rows($sql);

if($login_check > 0){
    while($row = mysql_fetch_array($sql)){
    foreach( $row AS $key => $val ){
        $$key = stripslashes( $val );
    }
        // Register some session variables!
        session_register('id');
        $_SESSION['id'] = $id;
        session_register('login_name');
        $_SESSION['login_name'] = $login_name;
        session_register('merchant_name');
        $_SESSION['merchant_name'] = $merchant_name;
        session_register('password');
        $_SESSION['password'] = $password;
       
        mysql_query("UPDATE merchants SET last_login=now() WHERE id='$id'");
    }
} else {
    echo "You could not be logged in! Either the username and password do not match or you have not validated your membership!<br />
    Please try again!<br />";
    include 'login.php';
}
header("Location: index.php");
?>


index.php:
------------------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?
session_start();

// check if the user info validates the db
include("/home/tacklepr/public_html/db.php");

$sql_doublecheck = mysql_query("SELECT * FROM merchants WHERE login_name='$login_name' AND password='$password' AND status_admin='1'");
$doublecheck = mysql_num_rows($sql_doublecheck);

if($doublecheck != 1) {
    include '/home/tacklepr/public_html/merchant/login.htm';
    exit();
}
include "/home/tacklepr/public_html/merchant/menu/menu.htm";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Tackleprices.com | Merchant Area</title>
<link href="/merchant/styles/default.css" rel="stylesheet" type="text/css">
<?
include "/home/tacklepr/public_html/merchant/include/head.php";
?>
</head>
<body>
<div id="container">
  <?
include("/home/tacklepr/public_html/db.php");
include "/home/tacklepr/public_html/merchant/include/menues.php";
?>
</div>
</body>
</html>
Avatar billede kgp43 Nybegynder
31. maj 2004 - 18:35 #8
Kan det være den header der bliver sat på login_check.php ?
Avatar billede kgp43 Nybegynder
31. maj 2004 - 18:37 #9
Nej, det kan ikke være den (login_check.php), da fejlen kommer inden kan logger ind :P
Avatar billede Slettet bruger
31. maj 2004 - 18:37 #10
Hvad med denne, i index.php

include "/home/tacklepr/public_html/merchant/include/head.php";

Står der headerinformation i den? Den bliver jo includet efter <html> ..
Avatar billede kgp43 Nybegynder
31. maj 2004 - 18:40 #11
head.php er tom
Avatar billede kgp43 Nybegynder
31. maj 2004 - 18:42 #12
menu.php indeholder noget script (ved ikke om det er grunden):

<SCRIPT language=JavaScript src="http://www.tackleprices.com/merchant/menu/milonic_src.js" type=text/javascript></SCRIPT>   
<script    language=JavaScript>
if(ns4)_d.write("<scr"+"ipt language=JavaScript src=http://www.tackleprices.com/merchant/menu/mmenuns4.js><\/scr"+"ipt>");       
  else _d.write("<scr"+"ipt language=JavaScript src=http://www.tackleprices.com/merchant/menu/mmenudom.js><\/scr"+"ipt>");
</script>

<SCRIPT language=JavaScript src="http://www.tackleprices.com/merchant/menu/menu_data.js" type=text/javascript></SCRIPT>
Avatar billede kgp43 Nybegynder
31. maj 2004 - 18:47 #13
Så vidt jeg ved, så findes der kun én header på mine sider - og den er på index.php (via include > header.php)
Avatar billede Slettet bruger
31. maj 2004 - 19:33 #14
<script> tagget skal stå i html filens <head> og er derfor ikke relevant...

Men hvis head.php er tom så ved jeg ikke..

Hvad står der i header.php som fejlen melder om?
Avatar billede kgp43 Nybegynder
31. maj 2004 - 19:39 #15
scriptet er flyttet, men uden resultat.

header.php indeholder koden til at checke om brugeren er logged ind:

<?
session_start();

// check if the user info validates the db
include("/home/tacklepr/public_html/db.php");

$sql_doublecheck = mysql_query("SELECT * FROM merchants WHERE login_name='$login_name' AND password='$password' AND status_admin='1'");
$doublecheck = mysql_num_rows($sql_doublecheck);

if($doublecheck != 1) {
    include '/home/tacklepr/public_html/merchant/login.htm';
    exit();
}
?>
Avatar billede Slettet bruger
31. maj 2004 - 21:39 #16
Includer du den noget sted hvor session_start() allerede er sat?
Avatar billede kgp43 Nybegynder
31. maj 2004 - 21:49 #17
Nej, session_start() anvendes kun i header.php
Avatar billede kgp43 Nybegynder
31. maj 2004 - 23:51 #18
Er der andre der kan se problemet/fejlen?
session_start() bliver kun sat et sted (lige efter doctype). Kan det skyldes noget andet?
Avatar billede kgp43 Nybegynder
01. juni 2004 - 00:17 #19
Jeg prøvede at smide ob_start() ind i før session_start(), men så kommer den bare med denne header fejl:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/tacklepr/public_html/merchant/index.php:2) in /home/tacklepr/public_html/merchant/include/header.php on line 3

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/tacklepr/public_html/merchant/index.php:2) in /home/tacklepr/public_html/merchant/include/header.php on line 3
Avatar billede kgp43 Nybegynder
01. juni 2004 - 08:43 #20
Jeg poster lige videre :P

Har erstattet den header include, med den aktuelle kode i stedet for - stadig samme problem:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?
session_start();

// check if the user info validates the db
include("/home/tacklepr/public_html/db.php");

$sql_doublecheck = mysql_query("SELECT * FROM merchants WHERE login_name='$login_name' AND password='$password' AND status_admin='1'");
$doublecheck = mysql_num_rows($sql_doublecheck);

if($doublecheck != 1) {
    include '/home/tacklepr/public_html/merchant/login.htm';
    exit();
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Tackleprices.com | Merchant Area</title>
<link href="/merchant/styles/default.css" rel="stylesheet" type="text/css">
<?
include "/home/tacklepr/public_html/merchant/include/head.php";
?>
</head>
<body>
<?
include("/home/tacklepr/public_html/db.php");
include "/home/tacklepr/public_html/merchant/menu/menu.htm";
?>
<div id="container">
  <?
include "/home/tacklepr/public_html/merchant/include/menues.php";
?>
</div>
</body>
</html>
Avatar billede kgp43 Nybegynder
01. juni 2004 - 10:50 #21
Okay, har fået det til at virke.

Fejlen skyldes doctype, det laver åbenbart noget output som session_start() ikke kan lide. Jeg flyttede derfor doctype ned efter min php kode - ved dog ikke om dette de-aktivere min doctype
Avatar billede thedeathart Nybegynder
01. juni 2004 - 10:53 #22
husk at session_start();
ALTID skal stå FØRST FØRST FØRST..

og aldrig andet.. :)
Avatar billede kgp43 Nybegynder
01. juni 2004 - 10:55 #23
heheh... det samme fik jeg at vide om doctype :P
Avatar billede Slettet bruger
04. juni 2004 - 15:15 #24
Doctype er udskrift, og doctype skal være først i udskriften.

session_start() skal være før udskrift.

Hvis du laver andet, der prøver at sende en header, skal det også være før udskrift.
Avatar billede kgp43 Nybegynder
06. juni 2004 - 16:17 #25
Okay :)

Jeg har valgt at give "pacr00n" point for hjælpen.
ligger du lige et svar, så får du point.
Avatar billede kgp43 Nybegynder
19. juni 2004 - 23:00 #26
pacr00n: mangler stadig et svar (ellers kan du ikke få point)
Problemet er løst, så skal bare have tråden lukket :)
Avatar billede kgp43 Nybegynder
23. juni 2004 - 11:58 #27
okay, vil have tråden lukket så jeg tager selv point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester