Czas życia ciasteczka sesyjnego

0

Czy można ustawić jakoś czas życia ciasteczka sesyjnego, np za pomocą setcookie(); czy jakoś inaczej?
Będę potrzebował dynamicznie zmieniać czas życia tego ciastka - przy każdym poruszeniu się użytkownika po serwisie czas życia sesji i ciastka przedłuża (odświeża) się (więc wyloguje usera dopiero po np. 30 minutach braku aktywności) + nie chcę, żeby ciastko przepadło po zamknięciu przeglądarki. Chodzi mi o coś takiego jak zawsze przy logowaniu na forach (np. phpBB3 czy choćby to forum) jest opcja 'zapamiętaj' i chcę żeby ta opcja była u mnie zawsze włączona.
Nie chodzi mi o ustawienie w php.ini czy gdzieś po stronie serwera.

[...]
$this->expireTime = 1800;
session_name('admin');
session_start();
setcookie(session_name(), '', time()+$this->expireTime, '/');
[...]

Myślałem, że powyższy kod da radę, ale niestety linia z setcookie(); powoduje, że ciasteczko sesyjne o nazwie 'admin' w ogóle nie jest tworzone!

0

Błagam, obejrzałeś chociaż listę funkcji session_ zanim zadałeś to pytanie?

http://pl.php.net/manual/pl/function.session-set-cookie-params.php

Dodatkowo rekomenduję ustawienie $bezpieczne na true. Spowoduje to że ciasteczko nie będzie dostępne tylko na poziomie protokołu HTTP (JavaScript nie będzie go widział, toteż nie będzie mógł nic z nim zrobić). Przydaje się jako dodatkowe zabezpieczenie przed atakami typu XSS.

0
Demonical Monk napisał(a)

Dodatkowo rekomenduję ustawienie $bezpieczne na true. Spowoduje to że ciasteczko nie będzie dostępne tylko na poziomie protokołu HTTP (JavaScript nie będzie go widział, toteż nie będzie mógł nic z nim zrobić). Przydaje się jako dodatkowe zabezpieczenie przed atakami typu XSS.

popieram, ale co za kretyn tłumaczył ten fragment dokumentacji?!
bezpieczne kojarzy się z osobnym parametrem ciasteczek "secure" które powoduje że ciastko jest dostępne tylko przez protokół HTTPS
zmienna oryginalnie nazywa się "httpOnly" i nazywa się tak samo jak parametr ciasteczek więc imo nie powinna być tłumaczona

nie mówiąc o tym że ustawienie httpOnly nie ma nic wspólnego z bezpieczeństwem - uniemożliwia jedynie przechwycenie ciastka przez XSS, nadal można je przechwycić i nadal będzie wysłane jeśli XSS zostanie wykorzystane do wysłania zapytania w imieniu "ofiary"

0

przepraszam, cofam - $bezpieczne to rzeczywiście tłumaczenie dla "secure"
Demonical mnie zmylił i to że polska dokumentacja nie jest aktualna i brakuje parametru httpOnly

więc domyślam się też że Demonical mówi o ustawieniu parametru httpOnly (kolejnym po $bezpieczne)

0

Hm! Fail! Pomyliło mi się właśnie przez to tłumaczenie "bezpieczne" z "httpOnly". Faktycznie ustawienie argumentu $bezpieczne powoduje że ciastko będzie dostępne przez HTTPS, a nie ustawi mu flagę httpOnly, co docelowo miałem na myśli. Wygląda na to, że ustawianie flagi httpOnly dla ciasteczka sesyjnego tworzonego przez PHP da się zrealizować tylko przez php.ini... Opcja session.cookie_httponly. Możliwe że ini_set pomoże, jestem zbyt zmęczony żeby się wczytywać.

[dopisano]
O cholera...

http://pl.php.net/manual/pl/function.session-set-cookie-params.php
http://pl.php.net/manual/en/function.session-set-cookie-params.php

W polskim tłumaczeniu, nie dość że jest wybrakowane to jeszcze gubią się argumenty? Masakra... Kolejna zmyła w ślicznym manualu PHP - w wersji polskiej artykułu nie ma piątego argumentu. Czyli zgadzam się z kolegą wyżej.

0

Ok, dziękuję, nie zauważyłem tego przedtem a przeglądałem nieco manual (tylko session_get... widziałem).
I już mam to co chciałem:

<?php
  $lifetime=600;
  session_set_cookie_params($lifetime); // czas zycia na poczatek
  session_start();

  setcookie(session_name(),session_id(),time()+$lifetime); // przy kazdym odswiezeniu strony przedluzamy czas zycia o kolejne $lifetime sekund
?>

A ustawienie $bezpieczne na true powoduje, że zaloguję się, ale potem przy jakimkolwiek ruchu po stronce tracę sesję i mnie wylogowuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1