J'ai également rencontré ce problème, et un paramètre dans $_SESSION
n'est pas une option pour moi. Pour PHP 5.3.8 :
- Si une session a été lancée avec la demande,
define('SID')
retournera FALSE
ainsi que $_SESSION
n'est pas réglé.
- Ceci est indépendant du fait que
session_id()
a été utilisé pour définir un identifiant de session ou non.
- Après le premier
session_start()
, SID
est défini et $_SESSION
est défini comme un tableau vide.
-
session_destroy()
ne désactive pas l'option session_id()
c'est une chaîne vide alors. SID
restera défini (et prendra sa valeur précédente, qui peut être une chaîne vide). $_SESSION
est laissé inchangé. Il sera réinitialisé/peuplé la prochaine fois. session_start
s'appelle.
Avec ces états, d'autant plus que session_id()
peut être appelé entre les deux afin de définir l'identifiant de l'utilisateur. suivant il n'est pas possible de déterminer en toute sécurité l'état de la session à l'aide de la fonction SID
, $_SESSION
y session_id()
.
"Essayer" avec session_start()
(par exemple, avec @
) n'est pas vraiment utile, car cela modifiera l'état de la session et le contenu du fichier $_SESSION
(et l'ajout d'un en-tête set-cookie si le cookie ne faisait pas partie de la demande). Dans mon cas, cela ne convenait pas.
Pendant que j'effectuais des tests, j'ai constaté que l'on ne pouvait pas essayer de modifier le paramètre ini de l'option session.serialize_handler
lorsque la session est active, pas même lorsque vous la définissez à la même valeur. Il en va de même pour session.use_trans_sid
Docs qui est plus léger. Cela m'a conduit à la fonction suivante :
/**
* @return bool
*/
function session_is_active()
{
$setting = 'session.use_trans_sid';
$current = ini_get($setting);
if (FALSE === $current)
{
throw new UnexpectedValueException(sprintf('Setting %s does not exists.', $setting));
}
$result = @ini_set($setting, $current);
return $result !== $current;
}
D'après ce que je vois, l'erreur vérifie uniquement l'état de la session active (et non désactivée), ce qui ne devrait pas renvoyer un faux positif lorsque les sessions sont désactivées.
Pour que cette fonction soit compatible avec PHP 5.2, elle nécessite une petite modification :
/**
* @return bool
*/
function session_is_active()
{
$setting = 'session.use_trans_sid';
$current = ini_get($setting);
if (FALSE === $current)
{
throw new UnexpectedValueException(sprintf('Setting %s does not exists.', $setting));
}
$testate = "mix$current$current";
$old = @ini_set($setting, $testate);
$peek = @ini_set($setting, $current);
$result = $peek === $current || $peek === FALSE;
return $result;
}
Quelques bac à sable .