J'ai créé deux fonctions pour créer(initsessioncookie) et afficher(infosessioncookie) les valeurs des sessions et des cookies dans un fichier php. La fonction infosessioncookie affiche bien les valeurs des sessions partout où je l'appelle mais pas les cookies, je suis obligé de faire F5 ou un header("Location: fichier.php") pour une Redirection/refresh du navigateur.
c'est une idée une session alternative ! j'essaierai
en fait
header("Location:monfichier.php?a$cs") est très bien pour moi d'autant que comme je le vérifie $get avec sécurité ! si une personne tente de changer mon lien.
Non seulement ! je peux faire une alerte avec une page 404 et de toute façon le test du $get renvoie header("Location:monfichier.php?a$cs") !
deplus comme c'est une page php appelé ça ne se voit pas dans le lien html
et comme c'est pour l'affichage spécifique des infos session et cookie c'est cohérent à chaque fois que des infos sont rajoutés session ou cookies !
T'as aussi la solution de créer une fonction personnalisée pour ajouter/editer les cookies, qui appelera setcookie() et remplira directement la superglobale $_COOKIE, histoire que tout soit à jour sans avoir besoin de recharger la page (ça fait faire le travail en double à ton server sinon).
- Edité par Sombrelune 15 septembre 2017 à 16:16:48
- Activer les erreurs : PHP - PDO-MYSQLI - ¯\_ツ_/¯ - Documentations :PHP - MySQL -
c'est ce que j'ai déjà mais c'est vrai que je l'ai faite pour les sessions d'ailleurs ma fonction s'appelle initSessionCookie()
mais effectivement la diviser en deux çà peut peut-être fonctionné mais pas sur une fois setcookie modifié donc appelé le rechargement sera obligatoire !
j'ai même deux fonctions pour vider les données dans les variables tableaux $_session et $_cookie !
A propos de header. J'arrive à rediriger vers n'importe quelle page page comme ceci //header ("Location:index.php?home=entree"); /* Redirection du navigateur */
Mais jamais revenir à la racine du site !!!
//header("Location:/index.php"); /* Redirection du navigateur */
Je précise que je suis en localhost et même si je fais :
//header("Location:/monsite/") /* Redirection du navigateur */ //header("Location:/monsite") /* Redirection du navigateur */ //header("Location:/monsite/index.php"); /* Redirection du navigateur */ //header("Location:http://localhost/monsite/index.php");/* Redirection du navigateur */
Y'a rien à faire là rien ne fonctionne ! J"ai bien lu la page http://php.net/manual/fr/function.header.php mais j'ai du loupé un chapitre une notion ! Je fais bien attention à pas de blanc et d'html avant aussi mais rien à faire : La page n’est pas redirigée correctement Firefox a détecté que le serveur redirige la demande pour cette adresse d’une manière qui n’aboutira pas. La cause de ce problème peut être la désactivation ou le refus des cookies.
Les sessions et les cookies ne fonctionnent pas de la même façon, donc initialiser les deux en même temps n'est pas forcément la meilleur chose à faire. Techniquement seules la session a besoin d'être initialisée, les cookies sont "déjà la" - à moins que par initialiser tu entends enregistrer/modifier les cookies.
Donc le mieux est de dissocier les deux, ou tout du moins de créer des fonctions propres au cookies pour les manipuler afin qu'ils restent théoriquement à jour (car faire un setcookie() ne met pas directement à jour la superglobale $_COOKIE, car le serveur n'est pas sûr que le navigateur en face prenne en charge les cookies et veuille bien les enregistrer, il en est certain uniquement au prochain rechargement de page quand le client va lui réenvoyer les cookies qu'il a). Il faut donc par exemple simplement avoir deux/trois fonctions dans le style:
<?php
function getMyCookie($name, $default = null)
{
return isset($_COOKIE[$name]) ? $_COOKIE[$name] : $default;
}
function setMyCookie($name, $value, $expire = 0, $path = '/', $domain = '', $secure = false, $httponly = false)
{
if( setcookie($name, $value, $expire, $path, $domain, $secure, $httponly) ){
$_COOKIE[$name] = $value;
return true;
}
return false;
}
function deleteMyCookie($name, $path = '/', $domain = '', $secure = false, $httponly = false)
{
if( setMyCookie($name, '', 1, $path, $domain, $secure, $httponly) ){
if( isset($_COOKIE[$name]) ){
unset($_COOKIE[$name]);
}
return true;
}
return false;
}
// Exemple :
setMyCookie('maVariable', 'maValeur'); // 3eme arg non renseigné (temps) = Cookie sur la durée de la session,
var_dump( getMyCookie('maVariable') ); // affiche "maValeur",
deleteMyCookie('maVariable'); // Supprime le cookie,
var_dump( getMyCookie('maVariable') ); // affiche null,
// Créer/mettre à jour un cookie (avec une durée de vie de 2s) à partir de son ancienne valeur:
// Recharger la page rapidement montre que la valeur s'incremente, attendre 2s et recharger la page reset le compteur.
// Le deuxième argument de getMyCookie permet de récupérer une valeur par defaut si le cookie n'existe pas (ici 0).
setMyCookie('autoIncrement', getMyCookie('autoIncrement', 0)+1, time()+2);
var_dump( getMyCookie('autoIncrement') ); // Affiche la valeur incrémentée,
?>
Rediriger n'est pas une solution pour palier à ce problème, et pour ton problème de redirection sur la page index, c'est parce que tu fais une redirection infinie (la page index.php redirige sur elle-même).
- Edité par Sombrelune 18 septembre 2017 à 11:46:25
- Activer les erreurs : PHP - PDO-MYSQLI - ¯\_ツ_/¯ - Documentations :PHP - MySQL -
"Rediriger n'est pas une solution pour palier à ce problème, et pour ton problème de redirection sur la page index, c'est parce que tu fais une redirection infinie (la page index.php redirige sur elle-même)."
C'est exactement ce que je me suis dit même pour la racine elle même \ ou index.php car la page est déjà chargée par défaut au démarrage. Je pense qu'on ne peut pas rediriger vers la racine c'est un peu comme faire un include sur la racine du site alors je suis déjà dans le site (sauf si je lui code pour vérifier tous les fonctions ou autres sont déjà chargés) il va crié que c'est déjà chargé avec redondance de nom de fonctions !
// Créer/mettre à jour un cookie (avec une durée de vie de 2s) à partir de son ancienne valeur:
// Recharger la page rapidement montre que la valeur s'incremente, attendre 2s et recharger la page reset le compteur.
// Le deuxième argument de getMyCookie permet de récupérer une valeur par defaut si le cookie n'existe pas (ici 0).
setMyCookie('autoIncrement', getMyCookie('autoIncrement', 0)+1, time()+2);
var_dump( getMyCookie('autoIncrement') ); // Affiche la valeur incrémentée,
là ce que tu proposes c'est générer un cookie "autoincrement"qui incrémente mais dont la durée de vie est tellement courte qu'il va se détruire au "rechargement" = affichage de ce cookie ; ce qui aura pour effet d'afficher les cookies plus long c'est celà ?
J'ai juste donné des exemples d'utilisation des fonctions que j'ai mis plus haut, l'exemple avec l'auto-increment ne concerne pas ton problème non, il est juste là pour te montrer comment on peut utiliser les fonctions.
Si tu utilises les fonctions données, ta variable $_COOKIE sera toujours à jour dans ton script, donc tu n'aura pas besoin de rediriger.
- Edité par Sombrelune 19 septembre 2017 à 14:04:12
- Activer les erreurs : PHP - PDO-MYSQLI - ¯\_ツ_/¯ - Documentations :PHP - MySQL -
Tu cherches à contourner un problème qui n'en est pas un, résultat tu mets au point des strategies bancales qui ne font qu'alourdir inutilement le fonctionement de ton site.
On reprend depuis le début: Pourquoi veux tu rediriger?
- Edité par Sombrelune 19 septembre 2017 à 15:54:18
- Activer les erreurs : PHP - PDO-MYSQLI - ¯\_ツ_/¯ - Documentations :PHP - MySQL -
Bah rediriger de façon visible en JavaScript (la redirection header() de PHP n'est, elle, pas visible) alors qu'on peut simplement corriger le problème en utilisant 2/3 fonctions simples, c'est dommage. Si tu commences à ajouter des "faux-fix" de partout sur ton site tu vas vite avoir des comportements inatendus et avoir beaucoup du mal à maintenir le tout.
- Edité par Sombrelune 20 septembre 2017 à 23:05:12
- Activer les erreurs : PHP - PDO-MYSQLI - ¯\_ツ_/¯ - Documentations :PHP - MySQL -
Je code en java et même en c de temps en temps et en php je n'ai absolument pas les mêmes réflexes :
dès que je rencontre une difficultés même petite soit j'utilise des variables compliquées soit je vois du coté js ; j'avoue cela reflète de ne pas bien poser mon problème au départ.
Faut que je me débarrasse de cette mauvaise habitude que j'ai un peu moins en java et encore moins en c.
Sujet résolu avec ton code ! mais je voulais quand même chercher par moi même sans copier coller et encore une fois me suis rabattu sur du js et oui ! qui en plus sera visible !
j'en ai fait de similaire pour les sessions proprement dit et je rencontre quelque chose qui n'est pas étrange mais redondant en fait :
$session étant juste un tableau :
$sessionStatusValue=array( 0=>'PHP_SESSION_DISABLED ==0 => si les sessions sont désactivées.', 1=>'PHP_SESSION_NONE ==1 => si les sessions sont activées, mais qu\'aucune n\'existe.', 2=>'PHP_SESSION_ACTIVE ==2 => si les sessions sont activées, et qu\'une existe.' );
si je créé une session avec session_name($session[0][0]) et session_id($session[0][1]) différent avant un session_start ou pas
apart le fait que session_status renvoie 1= (PHP_SESSION_NONE) mais il ne me créé pas de cookie session automatiquement normal puisque je n'ai pas appelé session_start()
(PHPSESSID qui serait différent ainsi que le SID ou le id du cookie session) si c'était le cas !
ensuite :
si je créé un cookie avec le même nom et la même valeur
si je fais un session_start() ou pas, il fait un refresh de la page et "le cookie session" s'affiche de suite.
par contre si je code pas le cookie comme si dessus surtout pour l'option EXPIRE ou le CONTENU il me créé :
rien à cause d'EXPIRE >0 (pas de session start donc rien)
ou deuxième cookie de même nom en plus du cookie session si le nom est identique que session_name sinon PHPSESSID .
Ce qui me trouble un peu est que si je fais juste la manip pour le cookie avec ce code je créé une sorte de cookie session ou vraiment le cookie session et sans appeler session start() ce change biensur juste pour le statut qui renvoie PHP_SESSION_NONE au lieu de PHP_SESSION_ACTIVE !
J'ai regardé les explications ici pour mieux comprendre mais j'ai du mal à tout digérer :
Tu ne peux pas créer toi même le cookie de session, c'est PHP qui gère comment les sessions sont enregistrées sur le serveur et envoyées au client (navigateur). PHP n'est par exemple pas obligé d'envoyer la session en passant par un cookie mais peut tout aussi bien passer l'id du cookie dans les URLs, de ce fait la generation du cookie de session dépend de la configuration de PHP et c'est les fonctions session_* qui gèrent tout ça de façon transparente.
Autrement dit, la valeur de session_status() ne changera qu'a la suite de l'appel des fonctions session_* (session_start() et session_write_close() principalement) donc créer un cookie avec le même nom/id que le cookie de session n'aura aucun effet sur le retour de la fonction session_status(), et il n'est évidement pas conseilé de manuellement modifier le cookie de session si on veut éviter les conflits et les pertes de session.
Je ne suis pas sur de comprendre pourquoi tu souhaites faire des manipulations sur le cookie de session, mais sache que ce n'est pas nécéssaire, il suffit d'utiliser les fonctions session_* pour gérer les sessions.
- Edité par Sombrelune 10 octobre 2017 à 16:51:58
- Activer les erreurs : PHP - PDO-MYSQLI - ¯\_ツ_/¯ - Documentations :PHP - MySQL -
j'aime bien apprendre à manipuler et à comprendre aussi avant aussi. Toute information ,connaissance qui peut déblayer le terrain des définitions de php.net.
Je suis en local donc comme pour tout, là j'étais sur les sessions et les cookies je demande des renseignements.
En même temps parce que ça m'obligeait à creuser le sujet, j'avais une envie faire pour un utilisateur une "multi session" par utilisateur donc un cookie qui se souvient avant de quitter le navigateur soit en enregistrant dans une table BDD soit par un cookie avec date de la dernière session sans perdre l'autre session que l'utilisateur pourrait rappeler avec la "configuration" lors de la fermeture quelque soit la session. Je joue qu'avec deux.
En plus je cherchais pour moi à afficher en direct toutes les informations variables celles globales principalement,sessions, cookie (qui m'embêtait puisque il fallait recharger) mais avec les fonctions qu'on m'a donné généreusement et que j'aurais pu coder si je réfléchissais un peu comme une méthode d'une classe java...
J'y suis presque avec un cookie nommé session qui a une date pour chaque session ouverte ou fermé qui se modifie lorsqu'on "switch" de session. Avec en plus pour continuer à pas faire simple lorsqu'il se déconnecte et supprime le cookie utilisateur, de supprimer l'ensemble des sessions le concernant. J'avais même pensé qu' à la déconnexion sa "config" soit enregistrer dans une table.
Je me complique surement la vie, que ce n'est peut-être pas comme ça que l'on doit faire en général ou que cela arrive rarement mais ça m'oblige à chercher et à comprendre le principe de session et cookie et cookie-session et les fonctions php. Je suis loin d'avoir tout digérer, je vois bien que l'on peut encore se compliquer la vie en manipulant le comportement originel de php.ini par le code, et plein d'autres choses encore.
Mais ce que j'expérimente est déjà bien assez dur à mon niveau.
J'en étais juste à utiliser session_start() et setcookie() avant sans savoir tout ce qu'on pouvait faire avec les session et les cookie. Je ne te cache pas que tout ça m'est venu en suivant le cours php de mateo
setcookie et affichage non instantané?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.