Quelqu'un peut-il me dire pourquoi les vars de session ne passent pas entre les pages? Ils travaillaient il y a 2 jours. Maintenant ce n'est pas? Il existe un système tiers qui enregistre les utilisateurs en fonction du système tiers. Je dirige les utilisateurs vers la page de connexion avec l'URL de retour. Le système tiers enregistre un utilisateur et lui transmet son identifiant et un jeton, puis les renvoie sur mon site avec l'identifiant et le jeton dans l'URL.
Si les sessions ne sont pas définies, j'essaie de récupérer l'ID et le jeton dans l'URL et de définir les sessions. (travail) Je génère ensuite mon propre jeton pour le valider par rapport au jeton transmis par le système tiers (fonctionne) lorsque je clique sur une autre page, les sessions que j'ai définies ne sont pas vides (????)
Voici mon code:
<?php
session_start();
// FUNCTION TO PASS THE URL THE USER IS ON SO THEY COME
// BACk TO THIS PAGE AFTER THE LOG IN. IF APPLICABLE
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
// DESTROY SESSION INFO IF TIMED OUT
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
session_destroy(); // destroy session data in storage
session_unset(); // unset $_SESSION variable for the runtime
}
// SET THE SESSIONS WITH INFO PASSED FROM
// LOGIN PAGE SENT AS A GET
if(isset($_SESSION['ID']) && isset($_SESSION['token'])) {}else{
$_SESSION['ID'] = $_GET['ID'];
$_SESSION['token'] = $_GET['token'];
}
// GENERATE MY TOKEN TO MATCH THE LOGIN SYSTEM TOKEN
$userIP = $_SERVER['REMOTE_ADDR'];
$secretkey = 'A Unique Key For The Logged In User Matching the Login System Passed From mydomain.com/login.php';
$algorithm = 'md5';
$mm = date('m');
$dd = date('d');
$mmdd = $mm.$dd;
$mytoken = strtoupper(hash($algorithm, $secretkey.$_SESSION['ID'].$userIP.$mmdd));
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
// THIS IS WHERE THINGS ARE GOING WRONG
// SESSION token IS NO LONG SET AFTER I Go To another page
// and my token isnt the same any more either because session ID
// is no longer set???
if($_SESSION['token']==$mytoken){}else{
header("location: https://mydomain.com/login.php?returnURL=".curPageURL());
}
?>
ok c'est foiré. Ce doit être un problème sur la configuration de fournisseur d'hébergement PHP je pense parce que j'ai créé deux pages. un appelé info avec ce code:
<?
session_start();
$_SESSION['ID'] = "112233";
$_SESSION['token'] = "mytoken";
print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="info2.php">info 2</a>
et un appelé info2 avec ce code:
<?
session_start();
print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="info.php">info</a>
info créé et imprimé la session ok. Lorsque je clique sur le lien pour accéder à info2, les sessions ne sont pas imprimées. Est-ce un problème de configuration d'hébergement?
La réponse à cette question est qu'il s'agissait d'une erreur de configuration d'hébergement. La société d'hébergement a changé quelque chose et cela fonctionne depuis.
Comme déjà mentionné, assurez-vous que vous appelez session_start()
sur chaque page.
De plus, les scripts sur différents sous-domaines sont-ils ?? Si tel est le cas, vous devez définir la valeur INI session.cookie_domain
sur .DOMAIN.EXT
.
Pour continuer à déboguer toute cette situation, effectuez une simple surveillance des cookies. Voyez si PHPSESSID
est présent en tant que cookie sur les deux demandes de page, sinon, c'est votre problème. Vous ne pouvez pas stocker les cookies entre domaines à moins de les reconstruire.
En réponse à votre mise à jour, essayez de le faire sous votre appel à session_start()
:
echo session_id();
Confirmez que c'est la même chose sur les deux pages. Sinon, vérifiez la valeur de session.cookie_domain
comme ceci:
echo ini_get('session.cookie_domain');
Est-ce que cela est réglé? Par défaut, le problème devrait être vide. S'il est défini, surtout s'il ne l'est pas pour votre domaine.
Vous pouvez également essayer de déboguer la valeur de cookie de PHPSESSID
comme je l’avais suggéré au préalable.
Liste de contrôle
1. Assurez-vous d'avoir utilisé session_start (); dans la page suivante.
2. Utilisez-vous un fichier .htaccess?
si tel est le cas, supprimez le fichier .htaccess et cochez la même chose.
certaines règles de réécriture causent des problèmes de session ...
3. Si la session fonctionne correctement et que vous rencontrez des problèmes uniquement avec le jeton, vérifiez que le jeton envoyé dans l'URL est url_encoded.
ce n'est pas le problème du serveur d'hébergement ...
vérifier vos URL
si un utilisateur est connecté sous "exemple.com", la session sera enregistrée pour "exemple.com" et non pas "WWW.exemple.com". Par conséquent, si un lien accède à www.exemple.com, il ne disposera pas de cette session.
vous pouvez utiliser htaccess pour toujours définir l'URL sur "WWW.example.com" utiliser le code ci-dessous pour cela
RewriteEngine On
RewriteCond% {HTTP_Host} ^ hemantjadhav.com $ [NC]
RewriteRule ^ (. *) $ http://www.hemantjadhav.com/ $ 1 [L, R = 301]
(remplace hemantjadhav par votre nom de domaine)
Vérifiez la taille du fichier de session: (code extrait de cet article )
$sessionfile = ini_get('session.save_path') . '/' . 'sess_'.session_id();
echo 'session file: ', $sessionfile, ' ';
echo 'size: ', filesize($sessionfile), "\n";
Si votre fichier de session a une taille nulle, assurez-vous qu'il y a encore de l'espace disque disponible sur votre serveur. C'était le problème que j'avais.
Vérifiez l'espace disque avec df -h
sur un serveur Linux.
Assurez-vous que les deux pages sont sur le même domaine . Même www.site.com est différent de site.com