Avatar billede horizon Nybegynder
26. december 2004 - 03:28 Der er 5 kommentarer og
1 løsning

Session problemer

jeg sidder her med 2 problemer mht. sessions.

Det ene er at jeg har lavet et brugersystem som bruger sessions, jeg har prøvet at lave noget så at når brugeren logger ind kan han/hun vælge om personen vil forblive logget på, eller om sessionen skal "dø" efter X antal minutter bestemt af brugeren, men så er mit spørgsmål, når jeg som bruger vælger "dø" efter f.eks. 60 minutter, er det så 60 minutter efter jeg loggede på, eller efter 60 minutters interaktivitet?

og det ser heller ikke ud til at virke, her er hhv min Form side og Funktion side

LogPaa.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<?php
include("Kilder/access.php");
    $query = "SELECT variabel, vaerdi FROM Indstillinger WHERE variabel = 'titeltekst'";
    $result = mysql_query($query)or die("MySQL fejl: " . mysql_error());
    $log = mysql_fetch_array($result);
?>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
        <title><?php echo $log['vaerdi']; ?></title>
        <link href="CSS/Style.css" rel="stylesheet">
    </head>

    <body bgcolor="#ffffff">
        <form action="Kilder/PHPLogPaa.php" method="post">
            Logon navn:<br>
            <input type="text" name="bruger" size="24">
            <p>Adgangskode<br>
                <input type="password" name="kode" size="24"></p>
            <p>Husk<br>
                <input type="radio" name="levetid" value="husk"></p>
            <p><input type="radio" name="levetid" value="minutter" checked><br>
                Log af efter:<br>
                <input type="text" name="sessionlevetid" value="60" size="5"><br>
                minutter</p>
            <p><input type="submit" name="logpaa" value="Log P&aring;"></p>
        </form>
        <p><a href="Opret.php">Opret&nbsp;Bruger</a></p>
<?php
session_start();

if ($_SESSION['status'] == "ingenbrugerkode") {
print("Du skal indtaste et Brugernavn og en adgangskode");
}

if ($_SESSION['status'] == "fejl") {
print("Der var noget galt med enten dit Brugernavn
    eller din adgangskode");
}

if ($_SESSION['status'] == "ingenbruger") {
print("Du skal indtaste et Brugernavn");
}

if ($_SESSION['status'] == "ingenkode") {
print("Du skal indtaste en adgangskode");
}
else
{
print("");
}
ob_flush();
?>
    </body>

</html>


PHPLogPaa:

<?php

if(is_array($HTTP_POST_VARS)) {
  $levetid = $HTTP_POST_VARS['levetid'];
  $minutter = $HTTP_POST_VARS['sessionlevetid'];
} elseif (is_array($_POST)) {
  $levetid = $HTTP_POST_VARS['levetid'];
  $minutter = $HTTP_POST_VARS['sessionlevetid'];
}

if($levetid = 'minutter'){

session_cache_limiter('private');
$cache_limiter = session_cache_limiter();

session_cache_expire($minutter);
$cache_expire = session_cache_expire();

}

session_start();

if ($_POST['bruger'] == "" AND $_POST['kode'] == "") {
        $_SESSION['status'] = "nobrugerpass";
    print("    <script language='javascript'>
        location.href='../LogPaa.php';
        </script>");
}

elseif ($_POST['bruger'] == "") {
       
        $_SESSION['status'] = "nobruger";
    print("    <script language='javascript'>
        location.href='../LogPaa.php';
        </script>");
}

elseif ($_POST['kode'] == "") {
       
        $_SESSION['status'] = "nopass";
    print("    <script language='javascript'>
        location.href='../LogPaa.php';
        </script>");
}

else

{
include("access.php");
$query = "SELECT logonnavn, vistnavn, adgangskode FROM Brugere WHERE logonnavn = '".$_POST['bruger']."' AND adgangskode= '".$_POST['kode']."'";
$result = mysql_query($query)or die("MySQL fejl: " . mysql_error());
$log = mysql_fetch_array($result);

$_SESSION['vistnavn'] = $log['vistnavn'];

if ($_POST['bruger'] == $log['logonnavn'] && $_POST['kode'] == $log['adgangskode']) {
   
        $_SESSION['status'] = "login";
        $_SESSION['navn'] = $_POST['bruger'];
    print("    <script language='javascript'>
        location.href='../Forside.php';
        </script>");
       
}

else
{
        $_SESSION['status'] = "fejl";
    print("    <script language='javascript'>
        location.href='../LogPaa.php';
        </script>");
       
}
}
?>


- - -

Det var det ene spørgsmål, det andet er, hvordan kan jeg smide værdien i en session ud i en variabel?
jeg har prøvet mit frem med dette: $bruger = $_SESSION['vistnavn']; men den vil ikke... er der noget andet specielt man skal gøre?
Avatar billede coderdk Praktikant
26. december 2004 - 05:43 #1
session_start() bør være øverst på alle sider du bruger sessionsvariable, og jo, det burde virke med $bruger = $_SESSION['vistnavn'];
Evt. lav en tom side, med dette og check:

<?php
  session_start();
  echo "<pre>";
  var_dump( $_SESSION );
  echo "</pre>";
?>

Log så ind og gå ind på den side, så burde du kunne se hvad der er sat.
Avatar billede erikjacobsen Ekspert
26. december 2004 - 10:27 #2
Du har læst og forstået:
    "Thus, you need to call session_cache_expire() for every request (and before session_start() is called)."
på http://php.net/session_cache_expire  ??
Avatar billede horizon Nybegynder
26. december 2004 - 13:31 #3
->Coderdk

Tak, jeg havde glemt den SESSION_START();

->erikjacobsen

Altså, vil det sige at jeg skal smide denne kodestump ind på alle sider?

if(is_array($HTTP_POST_VARS)) {
  $levetid = $HTTP_POST_VARS['levetid'];
  $minutter = $HTTP_POST_VARS['sessionlevetid'];
} elseif (is_array($_POST)) {
  $levetid = $HTTP_POST_VARS['levetid'];
  $minutter = $HTTP_POST_VARS['sessionlevetid'];
}

if($levetid = 'minutter'){

session_cache_limiter('private');
$cache_limiter = session_cache_limiter();

session_cache_expire($minutter);
$cache_expire = session_cache_expire();

}

de kan vel ikke gemme de variabler til alle sider vel?
Avatar billede erikjacobsen Ekspert
26. december 2004 - 13:41 #4
Det gør det problematisk (måske umuligt - jeg har ikke overvejet det så nøje), at
have en specific session_cache_expire på hver session. Mit bud er at sætte din
session-expire så højt som muligt på din server, og så selv programmere om den
er udløbet. Bemærk, at jo længere session-expire, jo flere ressourcer bruges
på serveren (omend det ikke er så meget).
Avatar billede horizon Nybegynder
26. december 2004 - 13:46 #5
hmm... jeg har set at i SMF forumet der kommer alle sessions ind i en database, jeg tænkte på om man så måske ikke kunne lave et script som smed sessionerne derind og så kunne et andet script på hver side fortælle databasen når brugeren er inaktiv og så efter X antal minutter så slettes den i databasen...

meen det lyder som meget arbejde
Avatar billede horizon Nybegynder
30. december 2004 - 14:38 #6
...
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