Avatar billede fhansen Praktikant
07. maj 2007 - 00:29 Der er 5 kommentarer og
1 løsning

Session bliver destroyed.

Hejsa.

Jeg har et login script, som der desværre er nogle få brugere der har problemer med. De bliver logget korrekt ind og bliver budt velkommen, men når de så forsøger at åbne en side der kræver login, får de at vide at de ikke er logget.
Jeg har lavet en lille fil der viser om session er sat, og det er de ikke, så et allerandet sted må session blive destroyed.

Jeg har vedlagt lidt kode, skal måske lige fortælle at jeg gerne vil koden om så den checker på en cookie istedet for IP.

bruger.php

<?php
$dbhost = "host";
$dbuser = "user";
$dbpass = "password";
$database = "database";
include("Lockfiles/settings.php");
?>
<!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">
<script type="text/javascript">
function setlogin(login){
location.href='set.php?login='+login+''};
</script>


</head>

<body>

<?
if(false == check_login()){
?>
<div id="Layer2" style="background-image:url(Images/Login.gif); filter:alpha(opacity=40);-moz-opacity:.4;opacity:.4;"></div>
<div id="Layer3">
<?
if(isset($_SESSION["besked"])) {
echo $_SESSION["besked"];
unset($_SESSION["besked"]);
}
?>
<table width="200" border="0" cellspacing="1" >
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post" class="style7">
  <tr>
  <td colspan="4" height="15"></td>
  </tr>
  <tr>
    <td width="10%" rowspan="8"></td>
    <td width="85%" colspan="2" ><span class="style5">Login:</span></td>
    <td width="5%" rowspan="8"></td>
  </tr>
  <tr>
    <td colspan="2">Brugernavn</td>
    </tr>
  <tr>
    <td colspan="2"><input type="text" name="brugernavn" id="brugernavn" value="<? echo $logg[0] ?>"></td>
    </tr>
  <tr>
    <td colspan="2">Password</td>
    </tr>
  <tr>
    <td colspan="2"><input type="password" name="password"  id="password" value="<? echo $logg[1] ?>"></td>
  </tr>
  <tr>
    <td>
      <input type="submit" value="Login" name="login"></td>
    <td><a href="Loginhelp.html" target="Contents" onMouseOver="window.status='Klik på spørgsmåltegnet, for at få hjælp !'; return true"  onmouseout="window.status=''; return true"><img src="Images/question.gif" border="0"></a></td>
  </tr>
  <tr>
    <td colspan="2"><a href="fguser.php" target="Contents">Har du glemt dit password ?</a></td>
  </tr>
</form> 
</table>
</div>
<?
 
}else{

// Brugeren er logget ind, lav en log ud knap
?>
<div id="Layer2"  style="background-image:url(Images/Logout.gif);  filter:alpha(opacity=60);-moz-opacity:.6;opacity:.6;"></div>
<div id="Layer3" >

<table width="200" border="0" cellspacing="1" align="center">
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">
  <tr>
    <td rowspan="8" width="5%"></td>
    <td width="90%">&nbsp;</td>
    <td rowspan="8" width="5%"></td>
  </tr>
  <tr>
    <td ><div align="center">Velkommen</div></td>
    </tr>
  <tr>
    <td><div align="center"><? echo $_SESSION["Navn"]; ?></div></td>
    </tr>
  <tr>
    <td><div align="center">
      <input name="logud" type="submit" value="Log ud" onClick="
    parent.document.getElementById('Contents').src = 'Right.html';">
    </div></td>
    </tr>
  <tr>
    <td align="center" height="12"></td>
    </tr>
       
  <tr>
    <td align="center"><? echo '<input type="checkbox" name="chkbx2" value="1" onclick="setlogin(\''.$_SESSION["No"].'\');"' . $chk . '>';?><label>Husk mig!</label> </td>
    </tr>
  <tr>
    <td align="center" height="12"></td>
    </tr>       
  <tr>
    <td align="center">
    <? if($_SESSION["Admin"] == 1){ echo '<a href="Lockfiles/admin.php" target="Contents">Administrator</a>';}?>
    </td>
    </tr>
</form>   
</table>

</div>

<?
} // end false tjek_login
?>
</body>
</html>

settings.php
<?php
function check_login() {
    if(isset($_SESSION["user"], $_SESSION["ip"]) && $_SESSION["ip"] == $_SERVER["REMOTE_ADDR"]) {
    return true;
    }
return false;
}

session_start();

if(isset($_POST["logud"])) {
    $_SESSION = array();
    session_destroy();
   
}
$default_text = "Forkert bruger og/eller password!!!";


if(isset($_POST["login"])) {
    if(($_POST["brugernavn"] > "" ) && ($_POST["password"] > "")) {
    login($_POST["brugernavn"],$_POST["password"]);
    }
}

function login($brugernavn,$password){
    global $dbhost;
    global $dbuser;
    global $dbpass;
    global $database;
   
        $db = @mysql_pconnect($dbhost, $dbuser, $dbpass) or die ("Kunne desværre ikke forbinde til databasen!".$dbuser);
        @mysql_select_db($database, $db) or die ("Kunne desværre ikke forbinde til valgte database!");
        $sql = 'SELECT s.Id, s.Nummer,s.Login, s.Password, s.Navn, s.Admin, b.Berth FROM sejler s
              LEFT JOIN berth b ON s.Nummer = b.Client
              WHERE Login = \''.$brugernavn.'\' AND Password = \''.$password.'\'';
        $check = mysql_query($sql) or die ("Sql fejl" );
       
        if(mysql_num_rows($check) != 0){
       
        $users = mysql_fetch_array($check);
          if ($users['Berth'] <= ''){
            $sql = 'SELECT s.Id, s.Nummer,s.Login, s.Password, s.Navn, s.Admin, b.Berth FROM sejler s
              LEFT JOIN berth b ON s.Nummer = b.Lejer
              WHERE Login = \''.$brugernavn.'\' AND Password = \''.$password.'\'';
              $check = mysql_query($sql) or die ("Sql fejl" );
              $users = mysql_fetch_array($check);
          }       

            $_SESSION["user"] = $brugernavn;
            $_SESSION["ip"] = $_SERVER["REMOTE_ADDR"];
            $_SESSION["Navn"] = $users['Navn'];
        $_SESSION["No"] = $users['Nummer'];
        $_SESSION["Plads"] = $users['Berth'];
        $_SESSION["ClId"] = $users['Id'];
        $_SESSION["Admin"] = $users['Admin'];
        $date = date('d-m-Y');
        $date = split('
  • ',$date);
            $_SESSION["Date"]= mktime(0,0,0,$date[1],$date[0],$date[2]);
            return true;
            }else{
            $_SESSION["besked"] = "Ingen bruger fundet";
            return false;
           
        }
}

?>
Avatar billede radion Nybegynder
07. maj 2007 - 10:00 #1
prøv at sætte

session_start();

i toppen af dit dokument i stedet?
Avatar billede fhansen Praktikant
07. maj 2007 - 18:51 #2
Det har jeg skam prøvet, uden held.
Avatar billede fhansen Praktikant
07. maj 2007 - 22:31 #3
Har tænkt lidt over det, det lyder da rigtigt at session_start skal stå i toppen.
Men hvorfor virker det så for hovedparten af brugerne.

Skal session_start() tilføjes i et script, der er includeres af et script, hvor der er lavet et kald til sesseion_start.
Avatar billede radion Nybegynder
08. maj 2007 - 09:54 #4
hov, det havde jeg ikke set, at det kun var nogen det ikke virkede for..

"Skal session_start() tilføjes i et script, der er includeres af et script, hvor der er lavet et kald til sesseion_start."
ahva ?

session_start(); skal tilføjes én gang for hver sidevisning hvor du ønsker at bruge sessions.

dvs. du behøver ikke at skrive session_start(); i undersider du inkluderer, hvis du har det på hovedsiden der inkluderer dem..
Avatar billede fhansen Praktikant
08. maj 2007 - 14:36 #5
*SS* Med script mener jeg en side...så du gav mig jo det svar jeg håbede på.

Men hvorfor pokker virker det ikke for alle bruger ???

Jeg har lavet en lille check side for at se om session er sat, og det er de ikke, men de har jo været sat, for ellers ville brugeren ikke blive budt velkommen.

Kan det have noget med brugerens sikkerhedsindstillinger at gøre....


Finn
Avatar billede fhansen Praktikant
17. juni 2007 - 21:30 #6
Lukker og prøver at stille spørgsmålet igen.
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