标题后丢失$ _SESSION值('Location:.........')

Boo*_*012 0 php session

这是我的代码:

$login      = $_SESSION['login'];
$statut     = $_SESSION['statut'];
$atelier    = $_SESSION['atelier'];
$connexion  = $_SESSION['connexion'];
session_destroy ();
$_SESSION['login']      = $login;
$_SESSION['statut']     = $statut;
$_SESSION['atelier']    = $atelier;
$_SESSION['connexion']  = true;
header('Location: http://10.13.48.60/no_serie.php');
Run Code Online (Sandbox Code Playgroud)

所以当我到达这里时,标题会将我发送到正确的页面,但每次我的登录值都会松动,就好像它没有再保存我的$ _SESSION值一样.难道我做错了什么 ?

或另一种解决方案是将变量放在链接中,如:

header('Location: http://10.13.48.60/no_serie.php?login = '.$login.', statut = '.$statut.', ...');
Run Code Online (Sandbox Code Playgroud)

但我更喜欢这个$_SESSION解决方案.

ps:我用我的每个页面开始session_start();,我从不触及$_SESSION价值.

谢谢

Luk*_*uke 5

您调用session_destroy()然后设置更多会话,因此您需要确保session_start()在重置会话之前再次调用.或者根本不打电话session_destroy.

像这样:

$login      = $_SESSION['login'];
$statut     = $_SESSION['statut'];
$atelier    = $_SESSION['atelier'];
$connexion  = $_SESSION['connexion'];

// session_destroy (); - unnecessary

$_SESSION['login']      = $login;
$_SESSION['statut']     = $statut;
$_SESSION['atelier']    = $atelier;
$_SESSION['connexion']  = true;
header('Location: http://10.13.48.60/no_serie.php');
Run Code Online (Sandbox Code Playgroud)

来自PHP.net:

session_destroy()销毁与当前会话关联的所有数据.它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie.要再次使用会话变量,必须调用session_start().

http://php.net/manual/en/function.session-destroy.php