Avatar billede heyn Nybegynder
27. januar 2006 - 12:15 Der er 5 kommentarer og
1 løsning

Mine sessions standser ikke.

Hej Alle.
Jeg har et problem med mine sessions. De vil ikke standse.
Jeg anvender ikke cookies.
Når jeg starter en session gemmer jeg sessionID som variabel $old_sessionID i DB.
Årsagen er at jeg så senere kan se om sessionen er nyoprettet el. kørende fra forrige sider. Det gør jeg ved:

$sesPath = session_save_path();
if ( file_exists($sesPath."\sess_".$old_sessionID) ) $state = "running";
else $state = "new";

Jeg afslutter sessions med:

session_unset();
session_destroy();

Burde det ikke have fjernet filen "sess_".$old_sessionID fra $sesPath?

Når jeg kikker i $sesPath (C:\Programmer\PHP\sessiondata) laves der bare flere og flere, og det gør det umuligt at anvende variablen $state til noget.

Mvh Christian
Avatar billede webstuff Nybegynder
27. januar 2006 - 12:30 #1
Har du husket at starte sessionen før du lukker den?

session_start();
session_unset();
session_destroy();
exit;
Avatar billede heyn Nybegynder
27. januar 2006 - 13:25 #2
Ja
Altså - Jeg kørte som test følgende script:

<?php
$state = isset($_REQUEST["state"])?TRUE:FALSE;
$link = mysql_pconnect("localhost","root","Co1per2ni3cus4");
mysql_select_db("test");
$query = "SELECT * FROM test_session WHERE testID = 1;";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$old_sessionID = $row['sesID'];
session_start();
$sessionID = session_id();
if ($state){
// Her burde sessionfil vel slettes?
    session_unset();
    session_destroy();
}
else{
    $query = "UPDATE test_session SET sesID = '".$sessionID."' WHERE testID=1;";
    mysql_query($query);
}
mysql_close($link);
$sesPath = session_save_path();
if ( file_exists($sesPath."\sess_".$old_sessionID) ) $tilstand = TRUE;
else $tilstand = FALSE;
?>
<html>
<head>
<script language="JavaScript" type="text/javascript">
tid = 30*1000;
function update_page(){
    setTimeout( "document.opdater.submit();",tid);
    return true;
}
document.onload = update_page();
</script>
</head>
<body>
    <form name="opdater" action="test_af_session.php" method="POST" target="_self">
<?php if (!$state){ ?>
    <input type="hidden" name="state" value="TRUE">
<?php } ?>
    </form>
<!-- Det tjekkes om forrige sessionfil er blevet slettet -->
<?php if ($tilstand){ ?>
Siden startede med at forrige sessionfil fandtes
<?php } else{?>
Siden startede med at forrige sessionfil ikke fandtes
<?php } ?>
</body>
</html>

Hver anden gang den opdaterer skabes en ny sassionfil, men den gamle slettes ikke.

Mvh Christian
Avatar billede webstuff Nybegynder
27. januar 2006 - 14:24 #3
<?php
session_start();
$state = isset($_REQUEST["state"])?TRUE:FALSE;
$link = mysql_pconnect("localhost","root","Co1per2ni3cus4");
mysql_select_db("test");
$query = "SELECT * FROM test_session WHERE testID = 1;";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$old_sessionID = $row['sesID'];
$sessionID = session_id();
if ($state){
// Her burde sessionfil vel slettes?
    session_unset();
    session_destroy();
}
else{
    $query = "UPDATE test_session SET sesID = '".$sessionID."' WHERE testID=1;";
    mysql_query($query);
}
mysql_close($link);
$sesPath = session_save_path();
if ( file_exists($sesPath."\sess_".$old_sessionID) ) $tilstand = TRUE;
else $tilstand = FALSE;
?>
<html>
<head>
<script language="JavaScript" type="text/javascript">
tid = 30*1000;
function update_page(){
    setTimeout( "document.opdater.submit();",tid);
    return true;
}
document.onload = update_page();
</script>
</head>
<body>
    <form name="opdater" action="test_af_session.php" method="POST" target="_self">
<?php if (!$state){ ?>
    <input type="hidden" name="state" value="TRUE">
<?php } ?>
    </form>
<!-- Det tjekkes om forrige sessionfil er blevet slettet -->
<?php if ($tilstand){ ?>
Siden startede med at forrige sessionfil fandtes
<?php } else{?>
Siden startede med at forrige sessionfil ikke fandtes
<?php } ?>
</body>
</html>
Avatar billede heyn Nybegynder
27. januar 2006 - 15:17 #4
Så vidt jeg kunne se bestod dit forslag i at flytte session_start() helt frem til begyndelsen.
Det har jeg gjort. Sessions-filerne bliver fortsat ikke slettet.
Jeg indsatte følgende lille tilføjelse i mit script:

SessionID:<br>
<?php echo $sessionID; ?><br>
SessionID fra DB:<br>
<?php echo $old_sessionID; ?><br>

Sessionsfilen oprettes kun hver anden gang. Det må vel betyde at sessionen kun standses hver anden gang når unset() og destroy() bliver udført. Fint nok. Men den gamle sessionsfil i C:\Programmer\PHP\sessiondata fortsætter med at eksistere.
Desuden viser min lille tilføjelse at $sessionID = session_id() giver en ny værdi hver gang siden køres. Jeg ville jo tro at $sessionsID kun forandredes hver anden gang siden opdatereres (altså når en ny session startes). Eller er det mig der helt har misforstået sammenhængen i sessions?
Avatar billede heyn Nybegynder
06. februar 2006 - 11:26 #5
Hej webstuff
Jeg fandt en løsning. Den kan ses på http://www.eksperten.dk/spm/685031 . Undskyld forstyrelsen.
Mvh Christian
Avatar billede heyn Nybegynder
13. februar 2006 - 11:34 #6
Målet var egentlig at kunne se om en side er i anvendelse af andre og bestemme brugerettigheder efter dette. Det kan man ikke jo ikke med sessions, da server jo ikke får besked hvis en bruger lukker sin browser el. skifter side.
Løsningen er et javascript som kan ses på http://www.eksperten.dk/spm/686590.
Christian
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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel