Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
CRAP | |
100.00% |
30 / 30 |
sessionManager | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
11 | |
100.00% |
30 / 30 |
secure_sha1($data) | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
reset_session($session_id=null) | |
100.00% |
1 / 1 |
2 | |
100.00% |
8 / 8 |
|||
update_token() | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
session_start() | |
100.00% |
1 / 1 |
7 | |
100.00% |
16 / 16 |
<?php | |
namespace manager; | |
class sessionManager{ | |
private static $prefix; | |
/*************************/ | |
/* SECURE SHA1 ALGORITHM */ | |
/*************************/ | |
public static function secure_sha1($data){ | |
return sha1( '">\[..|{@#))'.sha1($data.'_)Q@#((%*_$%(@#') ); | |
} | |
/*****************************/ | |
/* INITIALISATION DE SESSION */ | |
/*****************************/ | |
private static function reset_session($session_id=null){ | |
// On ferme la session | |
session_destroy(); | |
// On definit l'id session si donne en argument | |
if( $session_id != null ) | |
session_id( $session_id ); | |
// Precaution: on met a jour le cookie | |
setcookie('PHPSESSID', session_id(), time()+60*30 ); | |
// On redemarre la session avec le bon id session | |
\session_start(); | |
// On met a jour le token | |
self::update_token(); | |
header('Refresh: 0'); | |
} | |
/*******************/ | |
/* GENERE UN TOKEN */ | |
/*******************/ | |
private static function update_token(){ | |
$token = self::$prefix.self::secure_sha1(uniqid()); | |
// On definit le token en session | |
$_SESSION['session_token'] = $token; | |
// On definit le token en cookie | |
$_COOKIE['session_token'] = $_SESSION['session_token']; | |
setcookie('session_token', $_COOKIE['session_token'], time()+60*30 ); | |
} | |
/************/ | |
/* AMORCEUR */ | |
/************/ | |
public static function session_start(){ | |
/* [1] Génération et Gestion des donnees a utiliser | |
==============================================================*/ | |
// On genere le hash a partir des donnees personnelles | |
self::$prefix = self::secure_sha1( $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'] ); | |
// On cree un id session associe a ces donnees personnelles | |
$sessid = substr(self::$prefix,0,5) . substr(self::secure_sha1(uniqid()),0,24); | |
// On genere un token pour l'execution suivante | |
$token = self::$prefix.self::secure_sha1(uniqid()); | |
// On definit/recupere le token | |
$session_token = (isset($_COOKIE['session_token'])) ? $_COOKIE['session_token'] : null; | |
/* [2] Verification de l'id session | |
==============================================================*/ | |
\session_start(); | |
// On verifie l'id session (5 premiers chars du hash des donnees perso) | |
$valid_sessid = strpos( session_id(), substr(self::$prefix,0,5) ) === 0; | |
// Si id session incorrect ou pas de token | |
if( !$valid_sessid ) | |
self::reset_session( $sessid ); // On initialise la session (bon id session) | |
// si id session invalide | |
/* [3] Verification du token | |
==============================================================*/ | |
// On verifie que le token est valide | |
$valid_token = $session_token != null; // verification de l'existence du cookie | |
$valid_token = $valid_token && strpos($session_token, self::$prefix) === 0; // verification des donnes personnelles | |
$valid_token = $valid_token && isset($_SESSION['session_token']); // verification que la variable session associee existe | |
$valid_token = $valid_token && $_SESSION['session_token'] == $_COOKIE['session_token']; // verification que la session est coherente | |
/* [4] Si token inexistant | |
==============================================================*/ | |
if( !$valid_token ) | |
self::reset_session($sessid); // On initialise la session | |
else | |
self::update_token(); // Dans tous les cas, on cree un nouveau token | |
} | |
} | |
?> |