> Tous les forums > Forum des Webmasters
 session: la solution?
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
ogd
  Posté le 21/12/2009 @ 09:34 
Aller en bas de la page 
Astucien

Hello!

Je me pose une question existentielle...

Sur mon site, je vais ajouter un ensemble de liens qui devront renvoyer chacun vers une zone du site:

Actuellement, j'ai une page d'accueil avec un ensemble d'informations clicables

Si on clique sur le lien1, je voudrais que ça charge le site avec un menu spécifique, et une page d'accueil spécifique

pareil pour le lien 2 etc...

Je n'ai pas besoin que les gens se loggent ou autre...

Mais je me demandais si passer par les sessions serait la solution?

J'aimginais le truc comme ça:

une bdd avec:

-nom de session

-url du menu

-url de la page d'accueil

-url des différentes pages spécifiques.

Le truc, c'est que quand un visiteur veut avoir accès aux infos de la session 1, il ait toujours tout le site et les infos correspondantes à la session en plus

et s'il clique sur le lien2, les menu et infos de la zone 1 sont remplacés par celles de la zone 2

Que me conseillez vous?

Merci

Publicité
griggione
 Posté le 21/12/2009 à 15:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Bonjour ogd

Ma foi ça ressemble fort à un espace membre.

Tu trouveras ton bonheur chez Malcolm

http://www.php-astux.info/

midnightblue
 Posté le 21/12/2009 à 16:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

On pourrait effectivement s'inspirer d'une zone membre, mais cela ne semble pas exactement le probléme d'ogd. Déjà ogd indique que les gens n'ont pas besoin de se logger. D'autre part, il ne s'agit pas à proprement parler de zones protégées, mais en l'occurence de zone conservées.

Pour ce qui est de l'emploi des sessions...

Si on reste sur la même page, une page index par exemple dans laquelle sont appellées des pages par la fonction include, le systéme de session ne s'impose pas; il suffit de conserver, à chaque appel du ficher index, la variable qui indique la zone par la méthode GET notamment. Mais si le visiteur est censé naviguer sur plusieurs pages du site, le systéme de session est commode, il évite d'avoir à faire suivre la variable GET de page en page. Cela est effectivement intéressant. Ainsi s'il revient sur l'index aprés avoir baguenaudé; il retrouvera son menu de zone. Un clic sur un autre lien du menu des zones, et la session"zone" de la zone cliquée prendra le relais...

Comme l'idée d'ogd me paraît intéressante et susceptible d'être utile à d'autres applications, dont certaines que je développe; comme aussi il caille dehors; je me suis permis ce petit script de mise en application de l'idée d'ogd. J'ai essayé de commenter le mieux possible...et bien sur la présentation est sommaire.

<?php
session_start();

//TABLEAUX DES DONNEES -> à stocker dans tables bdd ou fichiers plats...ou comme ci-dessous direct php
//________________________________________________________

$zone=array();
$zone[]=array("hirondelle.html","grive.html","merle.html");
$zone[]=array("truite.html","vairon.html","brochet.html");
$zone[]=array("grive.html.html","truite.html","baleine.html");
//........................................................
/* Pour cet exemple
Le tableau zone[0] contient les pages qui sont accessibles en permanence quelle que soit la zone cliquée
Les tableaux zone [1] et suivants contiennent respectivement les pages de chaque zone
*/
//________________________________________________________

// INITIALISATION DES VARIABLES
// Deux variables : 1 - $numzone = le numéro de la zone ; 2 - $ page = la page à afficher

if(empty($_GET["numzone"])){ $_GET["numzone"]="0";} $numzone=$_GET["numzone"];
if(empty($_GET["page"])){ $_GET["page"]="";} $page=$_GET["page"];

// INITIALISATION DE LA SESSION et VA-ET-VIENT

if(empty($_SESSION["zone"])){$_SESSION["zone"]="";}
if($numzone=="0"){ $numzone=$_SESSION["zone"];}
if($numzone!=="0") {
$_SESSION["zone"]=$numzone;
if($numzone=="X") {$numzone="0"; $_SESSION["zone"]="0"; session_destroy();}
}

// DETERMINATION D'UNE PAGE PAR DEFAUT

if($page==""){ $page="truite.html" ;}

?>

<!-- PAGE HTML -->

<html>
<head>
<title>OGD</title>
<head>
<body>

<?php

// MENU DES LIENS SUR LES ZONES
$nzone=count($zone);
for($i=0;$i<$nzone;$i++){
echo " [ <a href='?numzone=".$i."'>ZONE".$i."</a> ] ";
}
echo "<hr>";

// MENUS SUR LES PAGES

// menu zone commune -> zone[0]

$npages=count($zone[0]); // nombre de pages de la zone commune
// parcours du tableau
for($i=0;$i<$npages;$i++){
// lien sur les pages -> on récupére les variables du tableau zone[0]
echo "<a href='?page=".$zone[0][$i]."'>".$zone[0][$i]."</a><br>";
}
echo "<hr>";

// menu de la zone choisie par clic -> zone[indice]

if($_SESSION["zone"]!="0"){
$numzone=$_SESSION["zone"];
$npages=count($zone[$numzone]); // nombre de pages de la zone choisie en cliquant
// parcours du tableau
for($i=0;$i<$npages;$i++){
// lien sur les pages -> on récupére les variables du tableau zone[0]
echo "<a href='?page=".$zone[$numzone][$i]."'>".$zone[$numzone][$i]."</a><br>";
}
}
echo "<hr>";

// AFFICHAGE DE LA PAGE ( juste le nom pour le test:-))
echo "Nom de la page à afficher ".$page;

// FIN DE SESSION
echo "<hr>";
echo "<a href='?numzone=X'>QUITTER</a>";


?>

</body>
</html>

Bien à vous.

*µ*

griggione
 Posté le 21/12/2009 à 18:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

RE

Ca à l'air interessant en effet.

Malcolm
 Posté le 21/12/2009 à 20:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

ça dépend de ton nombre de visiteurs aussi, de ta config php et de la quantité d'infos que tu stockes.

car il ne faut pas oublier qu'une session, c'est un tableau, donc de l'espace mémoire occupé.

Je pense que tu as l'air de te rapprocher d'une session, ça peut même être la solution, pourquoi pas avec des cookies.

ogd
 Posté le 22/12/2009 à 06:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

midnightblue >

Ben dis donc, c'est Nöel

Merci, je vais décortiquer tout ça et je reviens ensuite donner mes résultats

Malcolm >

Quel est le risque en cas de fréquentation trop forte (e qui n'est pas le cas encore, mais je désespère pas ?

Les cookies, j'y ai pensé aussi, mais s'ils sont désactivés chez l'utilisateur, c'est mort, donc j'ai besoin d'un système utilisable quelle que soit la config.

Merci Griggionne, j'avais déjà jeté un oeil sur le script de Malcolm, mais effectivement, j'aimerais éviter aux personnes d'avoir à s'inscrire.

Bonne journée à tous !

Malcolm
 Posté le 23/12/2009 à 01:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

tu peux tout à fait utliser mon système sans pour autant mettre en place une inscription !

si ce n'est que dans ce cas, c'est du volatile, donc à peine le navigateur fermé, tout est oublié.

concernant les pics de fréquentation : si tu ne mets que de petits nombres dans ta session, "ça va", si c'est pour stocker de longues chaines de caractères, faut penser que ça prend de la place ...

ogd
 Posté le 24/12/2009 à 07:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ok, merci Malcolm, je regarde ça dans les jours qui viennent.

Merci en core et bonnes fêtes de fin d'années à toutes et tous

Malcolm
 Posté le 24/12/2009 à 10:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

ogd a écrit :

Ok, merci Malcolm, je regarde ça dans les jours qui viennent.

Merci en core et bonnes fêtes de fin d'années à toutes et tous

même pas en dual/quad core ?

ogd
 Posté le 24/12/2009 à 13:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

tu veux parler de la dualité entre le quad, cet horrible engin à 4 roues, qui me réveille tous les samedi matins et le corps?

ce n'est plus une dualité, c'est un duel

Malcolm
 Posté le 24/12/2009 à 13:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

et même un bon duel...
ogd
 Posté le 28/12/2009 à 09:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bon, alors, j'ai étudié tes scripts...

J'ai compris le principe mais:

Je ne vois pas comment adapter à mes besoins:

-1)pour déclarer mes variables des sessions

je pense devoir faire qqchose dans ce style

<?php
if ((isset($_SESSION['z1'])) && (!empty($_SESSION['z1'])))
{
// la zone 1 a été enregistrée dans la session, j'affiche les éléments

echo 'patati patata';
}
else
{
// pas de zone en session : je n'affiche rien de plus
echo ' ';
}
?>

<?php
if ((isset($_SESSION['z2'])) && (!empty($_SESSION['z2'])))
{
// la zone 2a été enregistrée dans la session, j'affiche les éléments

echo 'patati patata';
}
else
{
// pas de zone en session : je n'affiche rien de plus
echo ' ';
}
?>

<?php
if ((isset($_SESSION['z3'])) && (!empty($_SESSION['z3'])))
{
// la zone 3 a été enregistrée dans la session, j'affiche les éléments

echo 'patati patata';
}
else
{
// pas de zone en session : je n'affiche rien de plus
echo ' ';
}
?>

is it right?

Mais, comment à partir d'une image linkee, je peux définir la session?

-2)pour afficher les éléments en fonction des sessions, je dois rappeler le if à chaque endroit où ces éléments doivent apparaitre?

-3)Comment je peux faire pour que si aucune zone n'est sélectionnée, donc pas de session ouverte, ce soit mon menu habituel qui soit chargé, mais que si une session est appelée, ce soit le menu correspondant qui soit appelé?

Merci pour tes explications et en retard, Joyeux Noël à toutes et tous !

Malcolm
 Posté le 28/12/2009 à 12:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Si j'ai bien compris : t'as ton site, avec un menu (par défaut) et dans ce menu, des liens.

Supposons un menu qui comporte les liens Accueil (site normal), Noel (site avec design noel) et pâques (site avec design pâques).

En arrivant sur ton site le visiteur doit avoir le template normal, s'il clque sur noel, il chargera la page correspondante avec la CSS de noel et le template de noel ... et pareil pour pâques.

comme tu ne donnes pas d'exemple précis, je ne comprends pas plus.

Si c'est bien ça : une solution "simple" pourrait être de placer, en début de chaque page, ces 2 lignes :

<?php

$this_filename = basename(__FILE__);
require('session.php');

?>

ça définit une variable ($filename) qui est le nom du fichier courant, par exemple accueil.php, ou noel2009.php et ça appelle un fichier qui va gérer la session.

dans ce fichier session.php, on y trouve :

<?php

session_start(); // l'ouverture de la session

if (!isset($_SESSION['template'])) // le visiteur vient d'arriver, on charge des données par défaut

{

$_SESSION['template'] = 'template_defaut.php';

$_SESSION['css'] = 'ogd.css';

$_SESSION['menu_gauche'] = '<ul><li><a href="accueil.php">Accueil</a></li> <li><a href="noel2009.php">Noel 2009</a></li> <li><a href="paques2009.php">Pâques 2009</a></li></ul>';

$_SESSION['menu_gauche_special'] = '<ul><li><a href="ogd.php">A propos de moi</a></li> <li><a href="contact.php">Contact</a></li> <li><a href="remerciements.php">Remerciements</a></li></ul>';

... // si besoin d'autres variables

}

// ok, et là on va se concentrer sur le thème (template + CSS) à afficher pour la page en cours

$array_pages_noel = array('noel2009.php', 'musique_noel.php', 'programme_du_jour.php', 'artistes_de_noel.php'); // tu peux compléter ce tableau comme tu le veux

if (in_array($this_filename, $array_pages_noel)) // si $this_filename est dans le tableau des pages de noel

{

$_SESSION['template'] = 'template_noel.php';

$_SESSION['css'] = 'noel.css';

$_SESSION['menu_gauche'] = '<ul><li><a href="accueil.php">Accueil</a></li> <li><a href="noel2009.php">Noel 2009</a></li> <li><a href="paques2009.php">Pâques 2009</a></li></ul>';

$_SESSION['menu_gauche_special'] = '<ul><li><a href="anges.php">Les anges</a></li> <li><a href="de_nos_campagnes.php">De nos campagnes</a></li> <li><a href="hymne.php">L'hymene des cieux</a></li></ul>';

... // si besoin d'autres variables

}

?>

()

en clair, tu préremplis ton tableau de session avec les valeurs initiales. Ainsi, ça se fera automatiquement pour chaque visiteur, quelle que soit la page d'entrée du site. (car on n'arrive pas forcément par l'index )

déjà, ça répond au point 3)

Ensuite, j'ai créé une variable ($array_pages_noel) qui est un jeu de pages qui ont les mêmes infos. ça peut n'être qu'une page (auquel cas, au lieu du in_array, tu testes if ($this_filename == 'lapage.php')) ou un ensemble de pages auquel cas le tableau que j'ai fait me semble plus adapté.

Et je suppose que tu as quelque part dans ta page

require($_SESSION['template']);

et dans ce template, par exemple :

<link type="text/css" href="<?php echo $_SESSION['css']; ?>" media="all">

J'espère avoir pu t'aiguiller ...

ogd
 Posté le 30/12/2009 à 06:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hello Malcolm,

Je regarderai tout ça avec intérêt d'ici quelques jours...

Ben vi, en fait, j'attends incessament sous peu l'arrivée d'un deuxième petit brin de vie et donc forcément...

En tous cas, je vous souhaite avec un peu d'avance une bonne et jeureuse année 2010!

Et s'il vous plait, ne prenez pas de risques inutiles sur la route, le 31 est un jour de fête et doit le rester dans toutes les familles

Publicité
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
-20 € dès 159 € chez Rakuten
-20 € @Rakuten

Rakuten offre aujourd'hui 20 € de réduction dès 159 € d'achats avec le code RAKUTEN20

Sachant que des boutiques françaises comme BoulangerCdiscountUbaldi ou encore Samsung vendent sur Rakuten aux mêmes conditions que dans leurs magasins, cela peut être intéressant.


Voir le bon plan
Graveuse laser SCULPFUN S9 (5.5W, 0,06 mm, 410x420 mm) à 207,82 €
207,82 € 329 € -37% @Geekbuying

Geekbuying fait une superbe promotion sur la graveuse laser SCULPFUN S9 qui passe à 207,82 € avec le code GKB23MS3 alors qu'on la trouve ailleurs à partir de 329 €. Cette machine de gravure laser va vous permettre de graver et découper le papier, le cuir, le bois, le bambou, la corne, le plastique, la céramique, l'acier, l'acrylique, ...

L'envoi se fait depuis un entrepôt européen. Vous êtes ainsi certains de recevoir l'enceinte rapidement et sans douane.


Voir le bon plan
SSD Silicon Power A55 1 To à 99,99 €
99,99 € 120 € -17% @Amazon

Amazon fait une promotion sur le SSD Silicon Power A55 2 To qui passe à 99,99 € livré gratuitement. Ce SSD à mémoire TLC possède un cache SLC et offre des taux de transfert de 550 Mo/s en lecture et 450 Mo/s en écriture. 


Voir le bon plan
Processeur AMD Ryzen 5 7600 (6 coeurs, 12 threads) + carte mère MAG B650 Tomahawk WIFI + 32 Go (2x16) DDR5 Corsair Vengeance 5600 MHz à 589,90 €
589,90 € 769 € -23% @RueDuCommerce

RueDuCommerce fait une promotion sur un pack comprenant un processeur AMD Ryzen 5 7600 (6 coeurs, 12 threads, 3.8 GHz/5.1 GHz, DDR5, PCIe 5.0), une carte mère MAG B650 Tomahawk WIFI et 32 Go (2x16 Go) de DDR5 Corsair Vengeance 5600 MHz à 589,90 € au lieu de 769 €.


Voir le bon plan
SSD Verbatim Vi550 S3 1 To à 47,86 € livré
47,86 65 € -26% @Amazon Allemagne

Amazon Allemagne fait une promotion sur le SSD Verbatim Vi550 S3 1 To qui passe à 43,26 €. Comptez 4,60 € pour la livraison en France soit un total de 47,86 € livrée. Ce SSD SATA III au format 2.5 pouces offre une vitesse en lecture de 520 Mo/ et en écriture de 500 Mo/s. Une bonne affaire pour booster un PC !


Voir le bon plan
Clé USB 3.1 Type C Sandisk Ultra 256 Go à 28,19 € livrée
28,19 € 49 € -42% @Amazon Allemagne

Amazon Allemagne propose la clé USB Sandisk Ultra d'une capacité de 256 Go à 23,69 € (avec la TVA ajustée). Comptez 4,50 € pour la livraison en France soit un total de 28,19 € livrée alors qu'on la trouve ailleurs à partir de 49 €.

Cette clé USB 3.1 possède un connecteur Type C et vous pouvez utiliser sur PC, smartphones et tablettes. Elle offre de bons débits d'environ 150 Mo/s en lecture et en écriture. Elle inclut le logiciel SanDisk SecureAccess pour un cryptage et une protection par mot de passe de vos données sensibles.


Voir le bon plan

Sujets relatifs
La meilleure solution pour créer un forum?
Blog: deux inconvénients. Une solution?
Meilleure solution mise ligne livre à télécharger
Solution "simple" pour réaliser un diaporama sonor
duree d'une session
Problème de gestion de variables de session
Problème de gestion de variables de session
Passage en session php
solution editeur et hebergeur pour débutant ?
Session java en jsp
Plus de sujets relatifs à session: la solution?
 > Tous les forums > Forum Forum des Webmasters