webForumDet fria alternativet

$_SESSION uppdateras inte...

9 svar · 318 visningar · startad av Webslave

WebslaveMedlem sedan maj 2002647 inlägg
#1

... på en gång.

Jag har en funktion som ska avgöra om den ska visa ett inloggninsformulär eller en utloggnings knapp. Jag använder

if(!($_SESSION['username'] AND $_SESSION['password'])){
  //visar inloggningsformulär
  }
  else{
  //visar logga ut knappen
  }
}

Men den uppdateras inte på en gång utan efter jag har loggat in så måste jag uppdatera för att den ska visa logga ut knappen... några idéer på vad som jag kan ha gjort fel?

BäckmanMedlem sedan nov. 2001274 inlägg
#2
if((!isset($_SESSION['username']) AND !isset($_SESSION['password'])){
  //visar inloggningsformulär
  }
  else{
  //visar logga ut knappen
  }
}

Vet inte om din kod är exakt likadan in terms of use så att säga?

Är !($variabel) likadant som !isset($variabel), eller är det inte alls det du vill åstadkomma?

Kommer säkert någon überskillad snart och hjälper dig ändå så. :)

SPiNMedlem sedan mars 20007 896 inlägg
#3

Testa följande:

<?php
session_start();

header( "Expires: 0" );
header( "Pragma: no-cache" );

if($_SESSION['username'] == "" AND $_SESSION['password'] == "" ){
  //visar inloggningsformulär
  }
else{
  //visar logga ut knappen
  }
}
WebslaveMedlem sedan maj 2002647 inlägg
#4

Nope... det fungerade inte... här är hela koden... vet inte om någon orkar med att läsa den :)

<?PHP
session_start();

require ("variablar.php");

$connect = mysql_connect("$host", "$user","$pass");

if(isset($logout)){
  $sql = "UPDATE users SET online=0 WHERE username='".$_SESSION['username']."' AND password = '".$_SESSION['password']."'";
  $result = mysql_db_query("$databas","$sql");
  
  echo "Du är utloggad.<br>";
  
  session_unset();
  session_destroy();
}

if(isset($login)){
  $sql = "SELECT * FROM users WHERE username='".$_POST['loginusername']."' AND password='".$_POST['loginpassword']."'";
  $result = mysQl_db_query("$databas","$sql");
  if(!($rad=mysql_fetch_array($result))){

    echo "Fel uppgifter, var vänlig försök igen.<br>";

  }
  else{
    $username=$_POST['loginusername'];
    $password=$_POST['loginpassword'];
    $logindatetime=date("Y-m-d H:i:s");

    $sql = "UPDATE users SET online=1,last_logged_in='$logindatetime' WHERE username='$username' AND password='$password'";
    $result = mysql_db_query("$databas","$sql");

    $sql = "SELECT userID FROM users WHERE username='$username' AND password='$password'";
    $result = mysql_db_query("$databas","$sql");
    $rad = mysql_fetch_array($result);
    
    $userID=$rad['userID'];
    
    session_register("username");
    session_register("password");
    session_register("userID");
    
    ?>
    Du är nu inloggad<br>
    <form action="<?=$PHP_SELF?>" method="POST" name="Logout">
    <input type="submit" name="logout" value="Logga ut"><br>
    </form>
    <?PHP
  }

}

function LoginForm(){
  if(!($_SESSION["username"] AND $_SESSION["password"])){
  ?>
  Logga in!
<form name="login" action="<?=$PHP_SELF?>" method="POST" OnSubmit="return KollaInlogg();">
<table>
<tr><td>
namn: </td><td>
<input type="text" name="loginusername"></td></tr>
<tr><td>
lösen: </td><td>
<input type="password" name="loginpassword"></td></tr>
<tr><td>
</td><td>
<input type="submit" name="login" value="LoggaIn"></td></tr>
</table>
</form>
<script language="JavaScript">
function KollaInlogg(){
  var user = document.login.loginusername.value;
  var pass = document.login.loginpassword.value;
  
  if((user.length !=0) && (pass.length !=0)){
    return true;
  }
  else{
    alert("Du har inte angett alla uppgifter!");
    return false;
  }
}
</script>
<?
  }
}  
LoginForm();

mysql_close($connect);
?>
WebslaveMedlem sedan maj 2002647 inlägg
#5

Bump bump

WebslaveMedlem sedan maj 2002647 inlägg
#6

Ingen som har någon idé? Måste jag gå tillbaka till att göra $loginusername och $loginpassword globala? Det fungerade förut men det ska tydligen inte vara lika bra som att använda $_session['loginusername'] etc...

MatteMedlem sedan aug. 20002 975 inlägg
#7

Använder du session_register() för att registrera sessionsvariabeln blir det mycket riktigt, som du säger, att variabeln placeras i $_SESSION först när du laddar om sida. $_SESSION hämtar upp de variabler som finns i sessionen när du kör session_start(), och i det här fallet hade du inte satt dina variabler än.

Vad manualen säger är att du kan (om register_globals=Off SKA) sätta dina sessionsvariabler direkt med:

$_SESSION['username'] = $username;

Nu kommer de att fungera i skriptet utan att du behöver ladda om sidan.

Liten sammanfattning:

Sätta/ändra sessionsvariabler:

session_start();
$_SESSION['variabel'] = "Hej";

Ta bort sessionsvariabler:

session_start();
unset($_SESSION['variabel']);

Avsluta session:

session_start();
$_SESSION = array();
session_destroy();

Detta ska enligt manualen gå att använda när både register_globals är av eller på, men jag har märkt att om man har register_globals på så går det inte att ta bort en enstaka sessionsvariabel med unset($_SESSION['variabel']) utan att avsluta sessionen. Vill man ta bort enstaka sessionsvariabler får man använda session_unregister() istället.

WebslaveMedlem sedan maj 2002647 inlägg
#8

Jag vet inte om det var så här du menade men när jag gjorde detta så fungerade:

    session_register('username');
    session_register('password');
    session_register('userID');

    $_SESSION['username'] = $username;
    $_SESSION['password'] = $password;
    $_SESSION['userID'] = $userID;
MatteMedlem sedan aug. 20002 975 inlägg
#9

Det är t.o.m så att det räcker med:

$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userID'] = $userID;

Det är endast om du är i läget att du ska behöva radera enstaka sessionsvariabler, utan att avsluta sessionen, som du behöver använda session_register()/session/unregister() när register_globals är till. Detta är en rapporterad bug som förhoppningsvis ska vara åtgärdad till PHP4.3.

WebslaveMedlem sedan maj 2002647 inlägg
#10

Aha... ok... då blev det ju lite mindre kod... tackar ;)

256 ms totalt · 3 externa anrop · v20260731065814-full.30151723
124 ms — hämta forumlista (db)
123 ms — hämta statistik (db)
130 ms — hämta tråd, inlägg och bilagor (db)