Avatar billede optur Novice
27. marts 2010 - 17:18 Der er 4 kommentarer og
1 løsning

Problemer med session i login script

selv om jeg logger ud, kan jeg stadig komme ind på login_success.php uden bruger og adgangskode. Hvad har jeg gjort forkert i min kode... der kommer ingen fejlbeskeder.


-- Min index.php:

<?php $idx=$_GET['idx']; ?>
<body>
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" action="checklogin.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Member Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input name="myusername" type="text" id="myusername"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="mypassword" type="password" id="mypassword"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
<?php if($idx==logud) { echo '<tr><td>Du er nu logget ud</td></tr>'; } ?>
</table>
</body>
</html>


-- Min checklogin.php:
<?php
ob_start();
$host="localhost"; // Host name
$username="optur"; // Mysql username
$password="s1t3e7n1"; // Mysql password
$db_name="solar_agency"; // Database name
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("$myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>


-- Min login_success.php:
<? ob_start();

// Check if session is not registered , redirect back to main page.
// Put this code in first line of web page.
session_start();
if(!session_is_registered(myusername)){
header("location:index.php");
}
?>
<body>
du er nu logget ind<br />
<a href="logout.php">logud</a>
</body>
</html>
<?php
ob_end_flush();
?>


-- Min logud.php:
<?php
ob_start();

session_start();
session_destroy();
header("location:index.php?idx=logud");
ob_end_flush();

?>
Avatar billede zips Juniormester
27. marts 2010 - 17:32 #1
Håber det er lokalt du testet, for ellers er det ikke optur men nedtur at give username og password her på eksperten.
Avatar billede jokerper Nybegynder
27. marts 2010 - 17:35 #2
$_SESSION['myusername'] == "";

Måske dette hjælper i -- Min logud.php
Avatar billede intenz Novice
27. marts 2010 - 17:42 #3
Du har den del småfejl rundt omkring.

session_register og session_is_registered bør ikke bruges mere, og forsvindet helt ud af PHP fra v. 6.
Brug i stedet
$_SESSION['myusername'] = $myusername;
osv.

Og til at tjekke, brug f.eks.:
if (isset($_SESSION['myusername'])) {
...
}

I din kode kan jeg ikke se at du starter sessionen på checklogin.php (session_start()).

Og her:
session_register("mypassword");
Sætter du bare dit password som en tekst, og ikke som variablen $mypassword.

Her:
if(!session_is_registered(myusername)){
Tjekker du efter myusername, og har glemt '' omkring den.

Alternativt kan du i login_success.php under session_start() prøve at indsætte:

print "<pre>";
var_dump($_SESSION);
print "</pre>";

Så kan du se hvad din session indeholder af data. Så kan du måske komme lidt nærmere problemet.
Avatar billede optur Novice
04. april 2010 - 00:17 #4
Øhh jeg må nok ærligt indrømme at alt sammen går mig lidt over hovedet... Jeg er rimelig meget ny til php, og har ikke helt fattet det endnu. Har desværre mere brug for at se hvordan det hele skal sættes sammen og meget gerne med kommentar. Helt i orden hvis det er for meget at forlange =)
Avatar billede jokerper Nybegynder
04. april 2010 - 11:51 #5
Eksempel
---------------------
Ny side 1.php

<?php
session_start(); /* Starter session skal bruges på alle sider med sessions */

$_SESSION['status']=="Logget ind"; /* Sætter session */

echo $_SESSION['status']; /* Viser session "status" */
?>
<a href="side2.php">Side 2</a>



--------------------
Ny side 2.php

<?php
session_start();
echo $_SESSION['status'];
?>
--------------------
Så har du mulighed for at følge en session.

Så kan du sikkert langsomt begynde at rette de SESSION fejl som er beskrevet længere oppe. Så du kan få det script til at virke.
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