webForumDet fria alternativet

Sessionsfråga

1 svar · 212 visningar · startad av str3ber

str3berMedlem sedan juli 200215 inlägg
#1

En liten fråga om sessioner:

<?
session_start();

// Kopplar upp mot databasen
$test = mysql_connect("server", "user", "pass");
mysql_select_db("dbuser");

// Någon vill logga in
if (isset($HTTP_POST_VARS['login'])) {
   //Letar efter angivet lösenord/användarnamn i databasen
   $query = mysql_query("SELECT * FROM LOGINPASS WHERE USER='{$HTTP_POST_VARS['user']}' AND PASS='{$HTTP_POST_VARS['pass']}'");

   if (mysql_num_rows($query) == 1) {
      // Rätt användare och lösenord, logga in
      	session_register("login");
	$login = "true";
   } else {
                // Felaktigt inloggning
                echo 'Felaktig inloggningsinfo.';
   }
}

// Någon vill logga ut
if (isset($HTTP_GET_VARS['action']) && $HTTP_GET_VARS['action'] == 'logout' && isset($HTTP_SESSION_VARS['login'])) {

   session_unregister("login");
   session_destroy();

   echo 'Du är utloggad. Välkommen åter!';

}

if (isset($HTTP_SESSION_VARS['login']) && $HTTP_SESSION_VARS['login'] == "true") {

   // Lägg allt som ska visas när man loggat in här...
   echo 'Du är inloggad.';

   echo "<br><br><a href=\"{$_SERVER['PHP_SELF']}?action=logout\">Logga ut</a>";

   echo "<br><br><a href='s2.php'>-=1=-</a>";

// Detta visar loginrutan om man inte är inloggad
} else {

?>
   <form method="post" action="<?= $HTTP_SERVER_VARS['PHP_SELF'] ?>">
      Username<br>
      <input type="text" name="user"><br>
      Password<br>
      <input type="text" name="pass"><br>
      <input type="submit" name="login" value="Login">
   </form>
<?
}
?>

Detta verkar vara säkert och bra men det är ett litet problem. För att scriptet ska fatta att man har loggat in måste man först fylla i rätt user & pass (givetvis). När man sen trycker på "Submit" så tömmer den formuläret. Om man sedan uppdaterar sidan så fattar den..
Jag provade att byta ut

if (isset($HTTP_SESSION_VARS['login']) && $HTTP_SESSION_VARS['login'] == "true") {

mot

if (isset($login) && $login == "true")

och då fattade han (php-tolken :) ) det direkt efter man tryckt på "submit". Dock var det inte särskilt svårt att hacka sig in m.h.a. http://sida.se/s1.php?login=true

Några förslag???

nkrantzMedlem sedan apr. 2002830 inlägg
#2

Gör så att du i formuläret har ett hidden field som heter typ action, med value login. Sedan kollar du bara mha

if ($_GET['action'] == "login")

eller missförstod jag dig eller?

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