Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Istunnon kesto on liian lyhyt

Sivun loppuun

manninen [23.10.2015 12:14:37]

#

Hei!

Minulla on lomake joka voi olla avoinna esim 5h päivässä, niin ettei kukaan tee sille mitään. Kokeilin määrittää sessionin voimassaoloaikaa session.gc_maxlifetime pidemmäksi, mutta tämäkään ei tunnu auttavan. Sivulle mentäessä sessionin elossaolo aika näyttäisi olevan se minkä sille määritin. Kuitenkaan sessio ei pysy sitä aikaa auki kuin haluaisin. Mikä menee päin v:tä


report.php:

/* Minä en pysy elossa, vaikka kuinka haluaisin */

require_once('../inc/sessio.inc.php');

require_once('../def.php');

require_once('../config/connection.php');

require_once('../inc/sessio_login.inc.php');

/* jne.. jne.. */

sessio.inc.php

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

my_session_start();

function my_session_start(){

  //How long sessions last
  $hours = 2;

  // php.ini setting required for session timeout.
  ini_set('session.gc_maxlifetime',$hours*60*60);
  ini_set('session.gc_probability',1);
  ini_set('session.gc_divisor',1);

  //Set the session parameters and start session
  $sessionCookieExpireTime=$hours*60*60;
  session_set_cookie_params($sessionCookieExpireTime);
  session_start();

  // Reset the expiration time upon page load
  if (isset($_COOKIE[session_name()]))
  {
   setcookie(session_name(), $_COOKIE[session_name()], time() +      $sessionCookieExpireTime, "/");
  }

}

sessio_login.inc.php

my_session_login();

function my_session_login()
{

  if(!isset($_SESSION['automatic_key']))
  {

    session_destroy();
    die();

  }

  if(!isset($_SESSION['henkilon_id']))
  {
    session_destroy();
    die();
  }
}

Mod. huom: yksi koodi per kooditagi!

The Alchemist [23.10.2015 13:49:56]

#

Älä nyt ainakaan määritä session voimassaoloajaksi kahta tuntia (rivi 27), jos session pitäisi säilyä jopa viisi tuntia. Doh.

manninen [23.10.2015 18:15:26]

#

Pahoitteluni esimerkin väärä tuntiaika. Olen kokeillut määrittää ajan 12H mukaan eikä se muuta asiaa. Vaikuttaako tietokoneen meno lepotilaan sessionin katkeamiseen?

Grez [24.10.2015 15:10:52]

#

manninen kirjoitti:

Vaikuttaako tietokoneen meno lepotilaan sessionin katkeamiseen?

Ei. Ethän sulje selainta välillä?

Esimerkistä ei tainnut käydä ilmi säilytetäänkö sessioita palvelimella levyllä vai muistissa. Jos palvelin poistaa epäaktiivisen palvelun muistista, niin silloin sessiot saattaa kadota sen takia, vaikka voimassaoloaika olisi määritelty pidemmäksi.

Kannattaa lähteä tutkimaan mikä osa hommassa kusee. Jos selain lähettää 5 tunnin jälkeisellä sivupyynnöllä session evästeen, niin silloin voit unohtaa vian syyksi minkään selainpään tapahtuman tai päinvastoin.

The Alchemist [24.10.2015 20:19:43]

#

Evästeiden vanhenemisajan näkee ainakin Firefoxilla ihan evästeiden tietoja katsomalla. Ei tarvitse alkaa suorittaa käytännön testejä viiden tunnin odottelulla. Kaikista turhin asia koko tässä kikkailussa on juuri selaimelle syötettävän evästeen vanhenemisaika, joten ottaisin sen itse kokonaan pois.

manninen [25.10.2015 01:28:13]

#

En sulje selainta välillä, se on aktiivisena.

Todennäköisesti vika on siinä, että palvelin poistaa epäaktiivisen palvelun. Pitää lähteä tutkimaan ongelmaa tuota kautta.

The Alchemist kirjoitti:

– –

Kiitä tästä ja muista neuvoista.

Metabolix [25.10.2015 10:08:02]

#

Evästeen muuttaminen on tässä tilanteessa hyödytöntä: eväste säilyy normaalisti selaimen istunnon ajan eli niin kauan, kuin selain on käynnissä.

PHP:n tapauksessa ei yleensä ole olemassa mitään ”epäaktiivista palvelua”, jonka palvelin poistaisi, sellainen taitaa olla jonkin muun ympäristön ongelma.

PHP siivoaa vanhat istunnot satunnaisesti session_start-kutsun yhteydessä. Siivous tehdään sillä hetkellä voimassa olevien asetusten mukaan. Jos eri tilanteissa voimassa ovat eri asetukset (sivuston eri osissa tai jopa saman palvelimen eri sivustoilla), poistaminen tapahtuu käytännössä pienimmän gc_maxlifetime-arvon mukaan.

Jos haluat, että session.gc_maxlifetime toimii, varmista, että samaan hakemistoon ei tallenneta muita istuntoja, eli tarvittaessa vaihda session.save_path.

Jos haluat hallita istuntoja tarkemmin, rekisteröi istuntojen käsittelyyn oma luokka.

manninen [25.10.2015 10:52:45]

#

Kiitän!

Lähden noudattamaan tätä ohjeistusta.

manninen [26.10.2015 17:13:13]

#

Metabolixin neuvo attoi eteenpäin sillä lisäsin ennen session_start() kutsua seuraavan komennon.

ini_set('session.save_path',realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));

Tämä auttoi Nebulan palvelimella, sivu ei kaatunut. Jostain syystä tämä ei tuonut toivottua apua Louhen palvelimella. Osaatteko neuvoa mikä niissä on erona, mitä minun tulisi seuraavaksi huomioida.

Metabolix [26.10.2015 20:25:35]

#

Onko polku varmasti sopiva? Oletko luonut hakemiston? Onko skriptillä sinne kirjoitusoikeus? (Pystyykö asetusta edes muuttamaan Louhen palvelimella?)

manninen [26.10.2015 20:34:18]

#

Hei!

Laitoin juuri Louhelle tiedustelua tuosta eikä kirjoitusoikeus käynyt mielessäni :) Sattuman kauppaa siis, että sain Nebulan puolella toimimaan. Kiitän jälleen ja paljon.

Näinhän se olikin. Oikeus puuttui. Kansio rakenne meni phpinfo:sta napatun tiedon mukaan ja Nebula näytti antavan tehdä niin. Louhi ei. Muutin kansiorakenteen niin, että pääsen sitä itse käpistelemään ja muuttamaan oikeuksia ja homma oli sillä selvä.
Kiitän jälleen!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta