web-dev-qa-db-fra.com

Comment définir la durée de la session

Comment définir la durée de vie d'une session en PHP? Je veux le définir pour toujours aussi longtemps que la demande existe. La demande est AJAX. Mon code PHP qui gère la demande AJAX est le suivant: 

// AJAX.php
<?php    
session_start();

$_SESSION['counter'] = $_SESSION['counter'] + 1;

header('Content-type: application/json');    
echo json_encode(array('tick' => $_SESSION['counter']));
?>

et le JavaScript:

$(document).ready(function() {            
function check() {
    getJSON('ajax.php');        
}

function getJSON(url) {                                
    return $.getJSON(
                url,
                function(data) {
                    $("#ticker").html(data.tick);
                }
           );
}

setInterval(function() {
    check();
}, 10000); // Tick every 10 seconds

});

La session est toujours réinitialisée après 300 secondes.

24
brian

Les sessions sur PHP fonctionnent avec une session de type Cookie, tandis que les informations de session côté serveur sont constamment supprimées.

Pour définir la durée de vie en php, vous pouvez utiliser la fonction session_set_cookie_params , avant le session_start: 

session_set_cookie_params(3600,"/");
session_start();

Par exemple, 3 600 secondes correspondent à une heure et à 2 heures 3 600 * 2 = 7 200.

Mais il s’agit d’un cookie de session, le navigateur peut l’expirer lui-même. Si vous souhaitez enregistrer de longues sessions (comme la connexion), vous devez enregistrer les données sur le serveur et un cookie standard côté client.

Vous pouvez avoir une table "Sessions":

  • session_id int
  • session_hash varchar (20)
  • texte session_data

Et en validant un cookie, vous enregistrez "l'identifiant de session" et le "hachage" (pour la sécurité) côté client, et vous pouvez enregistrer les données de la session côté serveur, par exemple:

Sur la connexion:

setcookie('sessid', $sessionid, 604800);      // One week or seven days
setcookie('sesshash', $sessionhash, 604800);  // One week or seven days
// And save the session data:
saveSessionData($sessionid, $sessionhash, serialize($_SESSION)); // saveSessionData is your function

Si l'utilisateur revient:

if (isset($_COOKIE['sessid'])) {
    if (valide_session($_COOKIE['sessid'], $_COOKIE['sesshash'])) {
        $_SESSION = unserialize(get_session_data($_COOKIE['sessid']));
    } else {
        // Dont validate the hash, possible session falsification
    }
}

Évidemment, enregistrez tous les appels de session/cookies avant d’envoyer des données.

34
Exos

Définissez les paramètres php suivants sur la même valeur en secondes:

session.cookie_lifetime
session.gc_maxlifetime

dans php.ini, .htaccess ou par exemple avec 

ini_set('session.cookie_lifetime', 86400);
ini_set('session.gc_maxlifetime', 86400);

pour une journée.

Liens:

http://www.php.net/manual/en/session.configuration.php

http://www.php.net/manual/en/function.ini-set.php

14
scasei

Les sessions peuvent être configurées dans votre fichier php.ini ou dans votre fichier .htaccess. Consultez la documentation de la session PHP .

Ce que vous voulez fondamentalement faire est de chercher la ligne session.cookie_lifetime dans le fichier php.ini et lui attribuer la valeur 0 afin que le cookie de session soit valide jusqu'à la fermeture du navigateur. Si vous ne pouvez pas éditer ce fichier, vous pouvez ajouter php_value session.cookie_lifetime 0 à votre fichier .htaccess.

3
Francois Deschenes

Avant PHP 7, la fonction session_start () n'acceptait directement aucune option de configuration. Maintenant, vous pouvez le faire de cette façon

<?php
// This sends a persistent cookie that lasts a day.
session_start([
    'cookie_lifetime' => 86400,
]);
?>

Référence: http://nl1.php.net/manual/en/function.session-start.php#example-5976

0
Jose