Avatar billede mrmox2 Nybegynder
20. december 2014 - 18:37 Der er 21 kommentarer og
1 løsning

Session variable dør efter en time uden aktivitet

Hej - denne kode virker fint på mit billige hotel hos domaindirect (PHP version 5.3.x, safemode off) men på mit hotel til drift hos wannafind timer session ud efter 1 time (PHP Version 5.3.29, safemode on).

Hvis der er over 1 time mellem aktivitet så ryger man retur til login på index.php når siden reloader. Det ser jeg som et udtryk for at serveren har lukket sessionen.

Er der en der har en ide om hvad jeg kan forsøge mig med?

<?php
session_start();
//check om session er aktiv, ellers nyt login
if (!isset($_SESSION['myplacename'])) {
header("location:index.php");
// Stop running code
exit;
}
//Version 1.0 dec 2014 TR
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Info about visitors</title>
    <link href="css/bootstrap.css" rel="stylesheet" type="text/css">
    <link href="css/custom.css" rel="stylesheet" type="text/css">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <meta name="viewport" content="width=device-width">
</head>
<body>
<script type="text/javascript">
    if(navigator.userAgent.match(/iPad/i)) {
        viewport = document.querySelector("meta[name=viewport]");
        viewport.setAttribute('content', 'width=400');
    }
</script>
<script type="text/javascript">
$(document).ready(function() {

$('.line2 > button').prop('disabled', true);
$('.line3 > button').prop('disabled', true);

var selectButton = function (btn) {
    $(btn).addClass('btn-success');
    $(btn).removeClass('btn-primary');
}

$('.line1 > button').click(function () {
    $('.line1 > button').prop('disabled', true);
    $('.line2 > button').prop('disabled', false);
    selectButton(this);
});

$('.line2 > button').click(function () {
    $('.line2 > button').prop('disabled', true);
    $('.line3 > button').prop('disabled', false);
    selectButton(this);
});

$('.line3 > button').click(function () {
    $('.line3 > button').prop('disabled', true);
    selectButton(this);
    var values = '';
    $.each($('.btn-success'), function (index, btn) {
        values += $(btn).html() + ';';
    });
window.location.href = "vthx.php?values=" + values;
   
});
});
</script>

<div align="center">
    <div class="page-header">
    <h2>Welcome to Place</h2>
    Please answer all three questions on every visit
    </div>
<div class="line1" align="center">
Have you been here before today?<br>
    <button class="btn btn-primary">No, 1st time</button>
    <button class="btn btn-primary">Yes</button>
</div>
<hr width="300px"/>
<div class="line2" align="center">
Where are you from?<br>
    <button class="btn btn-primary">Europe</button>
    <button class="btn btn-primary">Africa</button>
    <button class="btn btn-primary">Other</button>
</div>
<hr width="300px"/>
<div class="line3"align="center">
How old are you?<br>
    <button class="btn btn-primary">18-24</button>
    <button class="btn btn-primary">25-29</button>
    <button class="btn btn-primary">Other</button>
</div>
</div>
  </body>
</html>
Avatar billede mrmox2 Nybegynder
20. december 2014 - 18:38 #1
her er info om serveren hos wannafind
http://linux14.123hotel.dk/phpinfo.php
Avatar billede mrmox2 Nybegynder
20. december 2014 - 18:45 #2
her prøvet at lege med ini_set('session.gc_maxlifetime', $timeout); men jeg synes ikke det gør nogen forskel
Avatar billede repox Seniormester
20. december 2014 - 18:54 #3
Hvis det er et problem at sessionen timer ud, så sæt et AJAX script til at forny sessionen.
Avatar billede mrmox2 Nybegynder
20. december 2014 - 19:02 #4
Avatar billede mrmox2 Nybegynder
20. december 2014 - 19:04 #5
Men reloader den ikke hele siden.

hvis den gør duer det ikke - for hvis nu en bruger er ved at udfylde formen og siden reloader midt i det forløb ... så skal hav starte forfra
Avatar billede mrmox2 Nybegynder
20. december 2014 - 19:04 #6
Det er jo det besynderlige at på det andet hotel kører det fint ...
Avatar billede repox Seniormester
20. december 2014 - 19:25 #7
At sesionen timer ud efter en periode med inaktivitet er jo en sikkerhedsfeature og ikke noget der er lavet for at irritere.

Ved at bruge AJAX, indlæser du bare en side asynkront for brugeren og hjælper ham med at vedligeholde sessionen. Det reloader ikke hele siden.
Avatar billede mrmox2 Nybegynder
20. december 2014 - 19:35 #8
Ok, så jeg lægger dette script ind i koden .. hvor ca?

    $(document).ready( function() {
        var refreshTime = 1800000; // in milliseconds, so 30 minutes
        window.setInterval( function() {
            var url = 'http://mysite.mydomain/refreshsession.php?<?php echo time();?>';
            $.get( url );
        }, refreshTime );
    });


og så laver en refreshsession.php fil med dette indhold?

<?php
session_start();
?>
Avatar billede repox Seniormester
20. december 2014 - 19:59 #9
Jeg ville prøve noget ala:

$(document).ready( function() {
    window.setInterval( function() {
        $.post( "/", function( { data: "nada" } ) { });
    }, 360000 );
});
Avatar billede mrmox2 Nybegynder
20. december 2014 - 20:08 #10
ok - så det skulle være nok blot at indsætte ovenstående kode lige før den anden $(document).ready(function()
Avatar billede mrmox2 Nybegynder
20. december 2014 - 22:20 #11
ok - nu har jeg kopieret det ind - spændende at prøve om en time :)
Avatar billede mrmox2 Nybegynder
20. december 2014 - 23:34 #12
hmm - virkede ikke
deres support foreslår at prøve at sætte php_value session.gc_maxlifetime i en .htaccess fil men jeg ville nu hellere forlænge den fra browseren lidt ad gangen end at sætte den vildt højt som fast værdi

prøver lige med det der ajax link jeg fandt ovenfor
Avatar billede mrmox2 Nybegynder
21. december 2014 - 03:29 #13
hmm - måske virkede det i FF - lader lige de forskellige browsere stå åbne og se hvad der sker
Avatar billede mrmox2 Nybegynder
21. december 2014 - 12:35 #14
hej igen - hver test tager en time så det tager noget tid at få lavet noget der kan reproduceres.

Lige nu ser det ud til at dit trick virker på PC og på iPad med Safari, men ikke med Chrome. om nogle timer kan jeg testet nok til at kunne sige det med sikkerhed.
Avatar billede mrmox2 Nybegynder
21. december 2014 - 16:31 #15
Ok - jeg er nu ret sikker på at det:

Min "proff" host
Virker med AJAX trick på FF på PC
Ikke virker på iPad (hverken safari eller Chrome)

Min discount host:
Virker uden AJAX trick

Hvad kan der være med iPad som er anderledes?
Avatar billede repox Seniormester
21. december 2014 - 17:00 #16
Aner det ikke. Jeg har ikke en iPad og ville aldrig selv prøve at få en session til at løbe længere end højst nødvendigt uden brugerens aktive interaktion.
Avatar billede mrmox2 Nybegynder
21. december 2014 - 17:05 #17
Det har jeg bare brug for i den aktuelle situation. Den skal stå ved en indgang så ankomne kan angive de parametre der ligger på siden. Så det skal fungere selvom der ikke kommer nogen i noget tid.
Avatar billede repox Seniormester
21. december 2014 - 17:20 #18
Hvad er formålet med at bruge en session i dit tilfælde? Hvad bruger du din session til?
Avatar billede mrmox2 Nybegynder
21. december 2014 - 17:43 #19
Men kan der være en oplagt årsag til at AJAX trick virker på PC men ikke på iPad?
Avatar billede mrmox2 Nybegynder
21. december 2014 - 17:45 #20
Session er udelukkende en metode til at sikre at php filerne ikke kaldes direkte uden login (derfor har jeg det tjek af session-variable i hver php fil)
Det kan være jeg skal google lidt om der er andre løsninger på det problem
Avatar billede mrmox2 Nybegynder
19. januar 2015 - 00:59 #21
hej - jeg lukker den her, kører bare med discounthost.
repox, smider du ikke et svar, så får du halvdelen af pts for et kvalificeret løsningsforslag der givetvis ville fungere i andre situationer med andre behov.
mvh thomas
Avatar billede mrmox2 Nybegynder
05. marts 2015 - 00:49 #22
lukker
mvh t
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

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