Session perdu après la page de redirection en php
Lorsque j'utilise php header de redirection de toutes les variables de session sont perdues... Certaines personnes disent que l'ajout de exit(); juste après l'en-tête(""); permettra de résoudre le problème, mais il ne semble pas être la solution...
Quelqu'un peut s'il vous plaît aider?
Voici comment j'magasin variable dans la session:
include 'dbc.php';
$err = array();
foreach($_GET as $key => $value) {
$get[$key] = filter($value); //get variables are filtered.
}
if ($_POST['doLogin']=='Login')
{
foreach($_POST as $key => $value) {
$data[$key] = filter($value); //post variables are filtered
}
$user_email = $data['usr_email'];
$pass = $data['pwd'];
if (strpos($user_email,'@') === false) {
$user_cond = "user_name='$user_email'";
} else {
$user_cond = "user_email='$user_email'";
}
$result = mysql_query("SELECT `id`,`pwd`,`full_name`,`approved`,`user_level` FROM users WHERE
$user_cond
AND `banned` = '0'
") or die (mysql_error());
$num = mysql_num_rows($result);
//Match row found with more than 1 results - the user is authenticated.
if ( $num > 0 ) {
list($id,$pwd,$full_name,$approved,$user_level) = mysql_fetch_row($result);
if(!$approved) {
//$msg = urlencode("Account not activated. Please check your email for activation code");
$err[] = "Account not activated. Please check your email for activation code";
//header("Location: login.php?msg=$msg");
//exit();
}
//check against salt
if ($pwd === PwdHash($pass,substr($pwd,0,9))) {
//this sets session and logs user in
session_start();
session_regenerate_id (true); //prevent against session fixation attacks.
//this sets variables in the session
$_SESSION['user_id']= $id;
$_SESSION['user_name'] = $full_name;
$_SESSION['user_level'] = $user_level;
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
//update the timestamp and key for cookie
$stamp = time();
$ckey = GenKey();
mysql_query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") or die(mysql_error());
//set a cookie
if(isset($_POST['remember'])){
setcookie("user_id", $_SESSION['user_id'], time()+60*60*24*COOKIE_TIME_OUT, "/");
setcookie("user_key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/");
setcookie("user_name",$_SESSION['user_name'], time()+60*60*24*COOKIE_TIME_OUT, "/");
}
if(empty($err)){
header("Location: myaccount.php");
}
}
else
{
//$msg = urlencode("Invalid Login. Please try again with correct user email and password. ");
$err[] = "Invalid Login. Please try again with correct user email and password.";
//header("Location: login.php?msg=$msg");
}
} else {
$err[] = "Error - Invalid login. No such user exists";
}
}
Redirection code:
//connect database
require_once 'dbc.php';
page_protect();
$authorID = $_SESSION['user_id'];
if ( !empty($_POST["answ_content"]) && $authorID != 0 ) {
//vaqciot html chveulebriv texad
$content = htmlentities($_POST["answ_content"],ENT_COMPAT,'UTF-8');
$dro = date('Y-m-d H:i:s');
$qID = $_POST["question_ID"];
$author = $_SESSION["user_name"];
$sql="INSERT INTO wp_comments (comment_ID, comment_post_ID, comment_author, comment_author_IP, comment_date, comment_content, user_id)
VALUES
(NULL, '$qID', '$author', '123.123.123.123', '$dro', '$content', '$authorID')";
$result = mysql_query($sql);
//pasuxebis raodenobis ertit gazrda
$increase = "UPDATE wp_posts SET comment_count = comment_count+1 WHERE ID = $qID";
mysql_query($increase);
//gadamisamarteba shekitxvis gverdze
$url = 'Location:http://example.com/site/answ/question.php?ID=' .$qID;
header($url);
} else {
echo 'error';
}
Merci de montrer un peu de code et quelques adresses qui vous rediriger.
pouvez-vous nous montrer un peu de code? sont les cookies sont activés sur l'ordinateur des utilisateurs? utilisez-vous des biscuits pour vos sessions ou envoyez-vous toujours de la session, l'id que d'obtenir des paramètres et a oublié qu'à votre redirection?
L'ajout de tous les codes nécessaires...
Je l'ai testé sur plusieurs autres ordinateurs et il fonctionne très bien... impossible de trouver la moindre explication...
pouvez-vous nous montrer un peu de code? sont les cookies sont activés sur l'ordinateur des utilisateurs? utilisez-vous des biscuits pour vos sessions ou envoyez-vous toujours de la session, l'id que d'obtenir des paramètres et a oublié qu'à votre redirection?
L'ajout de tous les codes nécessaires...
Je l'ai testé sur plusieurs autres ordinateurs et il fonctionne très bien... impossible de trouver la moindre explication...
OriginalL'auteur King Julien | 2010-06-11
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de mettre
exit();
après votre en-tête de la redirection, sinon vous venez de charger deux pages de contenu en 1 page.Assurez-vous également que vous avez
session_start();
en haut de tous vos scripts.pourquoi avez-vous de marquer la réponse acceptée...?na pas réparer le mien!
Ils clé ici est la fonction session_start(); en haut de toutes vos pages
OriginalL'auteur Lizard
Vous n'êtes pas le début de la session. Pour utiliser des variables de session et de les transporter à travers les pages, vous avez besoin de mettre
en haut de chaque page avant toute autre chose.
OriginalL'auteur Joseph
Je tente de mettre l'id de session de mon propre à l'aide de :
Mais comme le la documentation dit, vous devez utiliser cette avant
De l'utiliser après le session_start(), efface les paramètres de la session.
OriginalL'auteur rage
Simples! assurez-vous que la page que vous êtes en provenance (par ex. http://www.example.com) vers un (eg.g http://www.example.com/redirect.php) avis www au début. Si vous modifiez cette page à page, alors oui, les choses se bancale.
OriginalL'auteur dvancouver
Ces séances ne fonctionne pas toujours comme nous le prévoyons, parfois. J'ai eu un problème similaire avec mon site web à l'aide de sessions qui se perdent. En gros, j'ai résolu par l'injection de la valeur que je veux garder sur la session dans le texte caché champ la première fois le chargement de la page. Puis la deuxième fois que j'appel de la page(la page soumettre) j'ai simplement lu la valeur de l'caché champ de texte et de poursuivre avec le reste de mon code.
C'est plus facile et plus propre que d'utiliser les sessions dans ce cas!
D'accord avec JoSo, les Sessions sont plus propres que d'un état d'affichage et les données de session n'est pas considéré comme l'état d'affichage de données...
qu'entendez-vous par les textfield...?textfied qui ne peut pas être vérifiée dans votre code source html?
OriginalL'auteur user1495956
sortie; doit être placé après le header de redirection ou session_regenerate_id(true); peut être utilisé
OriginalL'auteur Lovepreet Singh
Vous avez juste besoin de vérifier les permissions du fichier dans /var/lib/php annuaire
donner yje public permisssion de /var/lib/php/session répertoire.
et tout est fait.
OriginalL'auteur Arvind