Archief - PHP: sessie en cookie problemen op login pagina

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Featherfoot

Legacy Member
Hi all,

Ik ben nu aan het werken aan een loginscript met cookies en sessies. Tot gisteren werkte mijn loginpagina zonder problemen. Nu heb ik vandaag enkele heel erg vreemde problemen gekregen. Mijn loginpagina doet het wel ( geen fouten, dus ik krijg geen error report ) maar als ik op inloggen klik dan krijg een deel van de website te zien, maar blijft mijn pagina laden. De knop om te refreshen en de stopknop in mijn browser flitsen dan onophoudelijk.

Als ik mijn cookies disable dan krijg ik dat probleem niet meer. Maar dan kan ik ook niet inloggen. De gegevens worden wel verwerkt, maar er wordt precies geen nieuwe sessie aangemaakt. In mijn sidebar links komt normaalgezien een melding van: "u bent ingelogd als admin" maar nu blijft er staan: " u ben momenteel niet ingelogd of niet geregistreerd". Hoewel de logingegevens en databaseverbindingen allemaal kloppen.

Hier de code:
PHP:
<h1>Login</h1><br />

<?php
if(isset($_SESSION['user_id'])) {
 ?>
 Je bent reeds ingelogd.
 <script language="Javascript" type="text/javascript">
  location.href='<?= $loginpage ?>';
 </script>
 <?
}else{
 if(isset($_COOKIE['user_id'])) {
  // Cookie uitlezen, sessie aanmaken
  $sql = "SELECT member_ID,member_Level,member_Password,member_Active FROM tblmembers WHERE member_ID='".$_COOKIE['user_id']."'";
  $query = mysql_query($sql);
  $rij = mysql_fetch_object($query);
  $id = htmlspecialchars($rij->member_ID);
  $status = htmlspecialchars($rij->member_Level);
  $dbpass = htmlspecialchars($rij->member_Password);
  $actief = htmlspecialchars($rij->member_Active);
  if($dbpass == $_COOKIE['user_password'] AND $actief == 1) {
   $_SESSION['user_id'] = $id;
   $_SESSION['user_status'] = $status;
   ?>
   Er is weer een sessie aangemaakt. Je wordt doorverwezen.
   <script language="Javascript" type="text/javascript">
    location.href='<?= $loginpage ?>';
   </script>
   <?
  }else{
   echo "Je cookie klopt niet met wat er in de database staat of je account is niet geactiveerd. Mogelijk heb je je wachtwoord veranderd.<br />\nJe oude cookies zijn verwijderd.";
   setcookie("user_id", "", time() - 3600);
   setcookie("user_password", "", time() - 3600);
  }
 }else{
  if(isset($_POST['submit'])) {
   // Inloggen
   $sql = "SELECT member_ID,member_Username,member_Password,member_Level,member_Active FROM tblmembers WHERE member_Username='".$_POST['user']."'";
   $query = mysql_query($sql);
   $rij = mysql_fetch_object($query);
   $dbpass = htmlspecialchars($rij->member_Password);
   $userpass = md5($_POST['pass']);
   $userid = htmlspecialchars($rij->member_ID);
   $userstatus = htmlspecialchars($rij->member_Level);
   $useractief = htmlspecialchars($rij->member_Active);
   if($dbpass == $userpass) {
    if($useractief == 1) {
     $_SESSION['user_id'] = $userid;
     $_SESSION['user_status'] = $userstatus;

     if($_POST['cookie'] == "do") {
      setcookie("user_id", $userid, time() + 365 * 86400);
      setcookie("user_password", $dbpass, time() + 365 * 86400);
     }
     ?>
     Je bent succesvol ingelogd.<br />
     Je wordt doorgestuurd, indien er niets gebeurd <a href="<?= $loginpage ?>">klik dan hier</a>.
     
     <script language="Javascript" type="text/javascript">
      location.href='<?= $loginpage ?>';
     </script>
     <?
    }else{
     echo "Je account is niet geactiveerd. Activeer deze, door op de link in de verzonden e-mail te klikken.<br />\n<a href=\"javascript:history.back()\">&laquo; Ga terug</a>";
    }  
   }else{
    echo "Het door jouw ingevoerd wachtwoord klopt niet voor de gebruiker '".$_POST['user']."'.<br />\n<a href=\"javascript:history.back()\">&laquo; Ga terug</a>";
   }
  }else{
   // Inlogform
   ?>
   <form method="post" action="index.php?page=login">
    <table>
     <tr>
      <td>Gebruikersnaam:</td><td><input type="text" name="user" /></td>
     </tr>
     <tr>
      <td>Wachtwoord:</td><td><input type="password" name="pass" /></td>
     </tr>
     <tr>
      <td align="right"><input type="checkbox" name="cookie" value="do" style="border: 0px;" /></td><td><small>Ingelogd blijven (cookie)</small></td>
     </tr>
     <tr>
      <td></td><td><input type="submit" name="submit" value="Inloggen" /></td>
     </tr>
    </table>
    <small><a href="index.php?page=passvergeten" title="Wachtwoord vergeten">Wachtwoord vergeten</a></small>
   </form>
   <?
  }
 }
}

de website zelf kan gevonden worden op:
www.codesnip.be

killgore

Legacy Member
vrij onmogelijk dat die code werkt.

Je hebt immers html code voor setcookie, dan krijg je in principe een headers already sent error (en voor die op te lossen -> sticky, ik heb uitleg gepost)

Featherfoot

Legacy Member
Toch gek dat die tot gisteren wel steeds gewerkt heeft. Ik vraag me af waarom nu niet meer. Ik heb 1 van je oplossingen uitgeprobeerd namelijk die van ob_start();. Nu vraag ik mij af waar ik die precies moet declareren.

Featherfoot

Legacy Member
iamdesign zei:
helemaal bovenaan je code

Ik heb dit nu gedaan, maar nog steeds krijg ik vreemde fouten. Als iemand mijn code eens zou willen verbeteren. Want zelf begrijp ik het jammer genoeg niet meer. Dit heeft een maand goed gewerkt, ik moet ergens iets verkeerd gedaan hebben, enkel weet ik niet wat.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan