Avatar billede phpbegynder2004 Nybegynder
11. februar 2009 - 15:43 Der er 4 kommentarer og
1 løsning

Problemer med login-system

Hej,

Jeg har et login system, som i mange år har fungeret fint. Nu er der dog begyndt at ske det, at det til tider ikke virker.
Jeg modtager dog ingen fejlmeddelelse.

Mit loginsystem virker ved, at man logger ind og hvis oplysningerne passer med MySQL-databasen bliver man sendt videre til index2.php.
Hvis der er fejl i det indtastede bliver man sendt tilbage til index.php

Det virker ofte fint, men nogle gange bliver man sendt videre til index2.php (som om alt er fint), men det er som om sessionen ikke er sat og man bliver derfor redirected til siden login_udloebet.php.
Når problemet står på varer det ofte et par timer før man kan logge sig ind. Det er lidt frustrerende.

På forhånd tak! :)



/******** LOGIN FORMEN *****/
<?php
session_start();
include("inc/config.php");

/***** BRUGEREN ER IKKE LOGGET IND ******/
if(!isset($_SESSION['id'])){
  $head .='<script src="js/loginbox.js" type="text/javascript"></script>';
  $_SESSION[rights]=0;

  if(isset($_GET[wronglogin]) && $_GET[wronglogin]!="Brugernavn"){
    $nick_value = $_GET[wronglogin];
    $onclick_nick = $_GET[wronglogin];
  }else{
    $nick_value = "Brugernavn";
    $onclick_nick = "";
  }

  if(isset($_GET['temp_sti'])){
  $temp_sti = "?temp_sti=".$_GET['temp_sti'];
  }else{
  $temp_sti = str_replace("&", "_OG_", $_SERVER['QUERY_STRING']);
  $temp_sti = str_replace("?", "_HUH_", $temp_sti);
  $temp_sti = str_replace("=", "_LIG_", $temp_sti);
  $temp_sti = "?temp_sti=".$temp_sti;
  }

  $loginbox='    <form method="POST" action="system/login.php'.$temp_sti.'" name="logind">
            <input type="text" value="'.$nick_value.'" onclick="document.logind.nick.value=\''.$onclick_nick.'\';"  name="nick" size="23">
            <div id="div1"><input name="pass_temp" type="text" value="Password" onfocus="changeBox()" size="23"></div>
            <div id="div2" style="display:none"><input name="pass" id="password" type="password" value="" onBlur="restoreBox()" size="23"></div>
            <input type="submit" value="Log ind"><input type="submit" value="Opret bruger" ONCLICK=\'document.logind.action ="?go=opret"\'>
        </form>';

/***** BRUGEREN ER LOGGET IND ******/
}else{
  $loginbox='Du er logget ind som <b>'.$_SESSION[nick].'</b> (<a href="system/logaf.php">Log ud</a>)<br>
<a href="?go=settings">Rediger personlige oplysninger</a>';
}




Siden man bliver snedt videre til:

/********* login.php **********/
<?php
session_start();
include("../inc/config.php");
include("../inc/func.php");

/**** HVIS MAN IKKE ALLEREDE ER LOGGET IND ****/
if(!isset($_SESSION['id'])){
  $check = mysql_query("SELECT * FROM users WHERE nick='".skriv($_POST[nick])."' AND pass='".md5($_POST[pass])."'")or die(mysql_error());
  $users = mysql_fetch_assoc($check);

    /******* HVIS NICK/PASS ER FORKERT *******/
    if (mysql_num_rows($check) == 0) {
    header("Location: ../index.php?go=glemtpass&wronglogin=".$_POST['nick']."&temp_sti=".$_GET['temp_sti']);

    /******** HVIS LOGIN ER KORREKT ******/
    }else{

    /*******HENT ID, NICK, RETTIGHEDER *************/
    $_SESSION['id'] = $users['id'];
    $_SESSION['nick'] = $users['nick'];
    $_SESSION['rights'] = $users['rights'];
    $_SESSION['last_login'] = $users['last_login'];

        /******* SEND TIL STI ********/
        if(isset($_GET['temp_sti'])){
      $temp_sti = str_replace("_OG_", "&", $_GET['temp_sti']);
      $temp_sti = str_replace("_HUH_", "?", $temp_sti);
      $temp_sti = str_replace("_LIG_", "=", $temp_sti);
      $temp_sti = "?".$temp_sti;
    }
    mysql_query("UPDATE users SET last_login='".time()."' WHERE id='".$_SESSION[id]."'");

    header("Location: ../index.php".$temp_sti);
   
    }
/***** HVIS MAN ALLEREDE ER LOGGET IND *****/
}else{
    header("Location: ../index.php"); 
}

?>
Avatar billede sn0wflake Nybegynder
11. februar 2009 - 15:49 #1
Har du prøvet at putte en die() efter header()? F.eks.:

header("Location: ../index.php");
die();
Avatar billede phpbegynder2004 Nybegynder
11. februar 2009 - 16:34 #2
Okay, det vil jeg prøve - men hvordan skulle det hjælpe?
Som sagt: jeg har en formodningen, at det er sessionen der, at uransagelige årsager, der ikke bliver sat.
Avatar billede sn0wflake Nybegynder
11. februar 2009 - 16:53 #3
die() sørger for at rydde op og så stoppe scriptet. Syntes bare en header() uden die() så forkert ud.
Avatar billede phpbegynder2004 Nybegynder
11. februar 2009 - 17:27 #4
Hej,

Tak for din hjælp men det virkede desværre ikke :(
Jeg henvendte mig til web-supporten og de viste mig en smart metode, så man selv kan gemme sessionen i en selvvalgt mappe.

Problemet skyldes tilsyneladende at min host brug delte clusters hvilket fucker sessionen op.

Nu virker det dog.

Til andre:
Opret en .htaccess fil der indeholder følgende:
php_value session.save_path "din session mappes absolutte sti"

session mappen skal chmod'es til 777
Avatar billede sn0wflake Nybegynder
11. februar 2009 - 17:41 #5
Det skulle jeg også lige til at sige ;D Fint nok det lykkedes!
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