Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/06/2007, 16h41   #1
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Par défaut [Cookies] Fonctionnement au niveau de l'expiration

Bonjour,
Je veux limiter certaines pages de mon site à l'accès. J'utilise pour cela des sessions. Tout fonctionne pour l'identification des mots de passes et des logins qui sont dans une base de données SQL Server. Par contre, j'ai un pb pour le suite. J'ai mis le code suivant sur chacune de mes pages afin que pour les consulter, l'utilisateur ai ouvert une session :
code:
Code :
1
2
3
4
5
6
7
8
9
10
 
<?
session_start();
 
if(!isset($_SESSION['login'])) {
  echo 'Vous n\'êtes pas autoris´ à acceder à cette zone';
  include('login.htm');
  exit;
}
?>
donc si l'ulilisateur n'est pas identifié, il ne peut pas accèder à la suite. Le pb c'est que si je ferme la page ( et que même je redémarre le serveur), je peux accéder à toutes pages sans m'être identifié avant. On dirait qu'il conserve le login. Si qq voit d'où vient le pb... Merci.
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 16h50   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Les sessions sont, il me semble, valable pour une durée donnée (que tu définis quand tu crées ladite session.
Donc oui si tu as mis qu'elle était valable 3h, la fermeture du navigateur ou le rédémarrage d'Apache conserve tout de même la validité de ta session pendant 3h.
Montres le code qui crée la session pour voir
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 16h53   #3
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
Les sessions sont stockées (en general) dans des fichiers sur le serveur.

L'identifiant de ce fichier est (en general) stocké dans un cookie.

Du coup, si tu ferme tout, mais que le cookie est encore valide sur le poste client (date pas perimée) et que la session est encore valide sur le serveur (date pas perimée) ben tu est reconnecté automatiquement.

(t'es pas deconnecté, en fait)

Plusieurs solutions :

- timeout sur le cookie / la session (genre 15 min) comme ça, au bout de 15 minutes sans action de l'utilisateur, la session est detruite
- sur la page d'accueil du site, tu vide la session, ça oblige à se reconnecter
- y'en a surement d'autres, mais c'est dejà les pistes les plus classiques
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 17h05   #4
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
code de création de la session :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
// On démarre la session
session_start();
$loginOK = false; 
?>
 
 
<link rel="stylesheet" type="text/css" href="indexcss.css"/>
<HTML>
<HEAD>
 
<TITLE>
</TITLE>
</HEAD>
<BODY>
<div align="center">
<h1><font size=10><b><u> Site du télé suivi </font></u></b></h1>
</div>
 
<?
  	if( $id = mssql_connect('ESMAIL_AHOUZI','','') )
			{
				if( $id_db = mssql_select_db('BDTR') )
					{
 
					}
				else
					{
					printf("Echec de connexion à la base");
					}
 
			}
	else
			{
				printf("Echec de connexion au serveur de base de données");
			}
 
 
 
 
 
 
		if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password']))
			{
				$requete = "SELECT pwd,nom,login FROM identification WHERE login='".$_POST['login']."'";
 
				$req = mssql_query($requete) or die('Erreur SQL !<br>'.$mysql.'<br>'.mssql_error());
 
				$data = mssql_fetch_assoc($req);
 
 
 
				if($data['pwd'] !=$_POST['password'])
					{
					?>
					<div align="center"><br><br><br><big>
					<?
				echo "Désolé, le mot de passe : " . $_POST['password'] . "<br/>"; 
				echo "et le login : " . $_POST['login'] . "<br/>"; 
				echo " ne correspondent pas "
 
 
			?>		<br><br><br>
				Cliquer <a href="login.htm">ici</a> pour recommencer
					</big></div>
 
 
				 </big></div>
					<?
 
 
					}
				else
					{
					?>
					<div align="center"><br><br><br><big>
					<?
					echo " Bienvenue";
					?> <br><?
                    $loginOK = true;
 
					echo $data['nom'];
					?> <br><br><br><?
					echo" vous êtes maintenant connecté à la base de données";
					?> <br><br><br>
					Cliquer <a href="page_carte_maroc.htm">ici</a> pour continuer
					</big></div>
					<?
					}
		}
 
 
 
		else
			{
			?> <div align="center"><br><br><br><big><?
				echo "Vous avez oublié de remplir un champ";
				?> <br><br><br>
					Cliquer <a href="login.htm">ici</a> pour recommencer
					</big></div>
					<?
 
			}
 
 
 if ($loginOK) 
{
 
  $_SESSION['login'] = $data['login'];
 
 
 
}
 
 
 
?>
<div align="center">
 </br></br>
       Retour au sommaire, cliquer<a href="sommaire.htm" color="red"> ICI</a><br/></br>
</div>
</BODY>
</HTML>
En fait je voudrais que dès que l'utilisateur n'est plus sur le site, ou bien dès qu'il ferme le navigateur, la session se ferme.
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 17h10   #5
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
Dans ce cas, desactive la propagation de l'identifiant de session par cookie.

Comme ça, l'utilisateur est obligé de se loggué à chaque fois qu'il va sur ton site par une adresse directe et pas par un lien (l'identifiant de session est propagé dans les liens)

Pour plus d'infos, il y a les tuto sur les sessions
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 17h17   #6
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Comment puisque désactivé la propogation de session par lien ? Il ne faut pas que l'utilisateur soit bloqué à chacune de mes pages. Tout de que je veux c'est qu'il soit obligé de se reconnecter à chaque fois qu'il revient dessus.
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 17h22   #7
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
Citation:
Comment puisque désactivé la propogation de session par lien ?
J'ai pas tout compris, là....

Propagé l'identifiant par les liens, ça veut dire que le serveur va rajouté l'identifiant à chaque lien de tes pages, de facon automatique et transparente.

Donc si l'utilisateur clique sur un lien de la page, ça marche.

Par contre, si il tapes l'adresse dans IE, ça marche pas (il est pas connecté)

Ca se configure dans la conf. du serveur. Ca depend aussi des hebergeurs.

Mais un tutos sur l'utilisation des session pour securiser un site t'aiderais surement
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 17h52   #8
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Voilà c'est exactement ce que je veux faire. Je viens d'aller voir le fichier php.ini dans le dossier apache. J'ai enlevé un ";" pour rajouter une fonction mais ça ne marche pas. Quand je met le lien dans le navigateur, il m'autorise toujours à accèder à la page sans l'ouverture de la session.

Code :
1
2
3
4
5
6
7
 
register_globals = Off         [Security, Performance]
;     Global variables are no longer registered for input data (POST, GET, cookies,
;     environment and other server variables).  Instead of using $foo, you must use
;     you can use $_REQUEST["foo"] (includes any variable that arrives through the
;     request, namely, POST, GET and cookie variables), or use one of the specific
;     $_GET["foo"], $_POST]
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 18h51   #9
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Est ce que quelqu'un sait quoi faire dans le php.ini pour que la session s'arrête dès que l'utilisateur n'est plus sur le site et par conséquent doit s'indetifier à nouveau s'il revient ?
Merci.
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 09h21   #10
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
En haut de la page du forum, tu as un lien "FAQ session"

Et dedans, il y a ça :

http://php.developpez.com/faq/?page=...ons_confphpini
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 13h43   #11
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Un fichier est bien créé quand je démarre ma session. Par contre à chaque fois que je change de page, il m'en crée un autre, parfois vide. A quoi est ce dû ?
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 13h45   #12
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
Si il en crée un autre, c'est que tu ouvres une autre session.

Ton identifiant de session ne doit dons pas etre propagé, sinon le "session_start" n'ouvrirais pas une nouvelle session mais utiliserai celle en cours.
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 14h10   #13
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
En fait, une fois identifié, je fais la vérification au départ de chacune de mes pages :
Code :
1
2
3
4
5
6
7
8
9
10
11
<?
 
session_start();
if(!isset($_SESSION['login'])) 
{
 
  include('login_reload.htm');
  exit;
}
else
/*mon programme*/
Pour envoyer les paramètres d'une page à une autre, je fais :
Code :
$_SESSION['login'] = $data['login'];
à chacune de mes pages. Est ce que que c'est juste ? Sinon, comment faire pour envoyer les informations d'une page à une autre ?
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 14h12   #14
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
Je veux par etre lourd, mais bon...

Je te parle de l'identifiant de session, pas des variables stockées dans la session...

Citation:
Est ce que que c'est juste ? Sinon, comment faire pour envoyer les informations d'une page à une autre ?
Il y a differentes techniques :
- les sessions (données persistentes sur le serveur)
- les cookies (données persistentes chez le client)
- GET
- POST

mais pour tout ça, commence par lire les tutos et les cours sur le PHP, les Session et les formulaires...
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 14h27   #15
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Ca fait déjà un moment que je sais comment marche les POST et les GET.
Tout ça ne me dit pas pourquoi il me crée un autre fichier avec un id différent, avec un contenu vide. Ca j'ai bien compris que c'est parce que mon id ne se propage pas, mais je ne sais pas pourquoi et comment y remédier. Quant au tuto, c'est fait déjà plusieurs jours que je suis dessus et je n'ai toujours pas trouvé la réponse. Si je viens ici c'est parce que je n'ai pas trouvé.
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 14h38   #16
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
Il y a possibilités pour propager l'identifiant de session :

- en utilisant les cookies (ca se regle dans php.ini)
- dans l'URL (par GET) de facon automatique (URL rewriting, ca se configure dans php.ini)
- dans l'URL à la main, mais ça craint

Regarde donc la conf de ton php.ini

Tu peux aussi essayer, dans la pluspart de tes pages, de faire :
(en activant register_globals dans php.ini)

Si ca n'affiche rien, ou pas toujours la meme chose, tu as bien un souci avec la propagation de ton identifiant de session, sinon c'est autre chose.
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 15h42   #17
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Ca marche, cependant j'ai un autre pb. Quand je suis à une page et que je fais PAGE PRECEDENTE, internet me mets ce message d'erreur :
Citation:
Warning: Page has Expired The page you requested was created using information you submitted in a form. This page is no longer available. As a security precaution, Internet Explorer does not automatically resubmit your information for you.

To resubmit your information and view this Web page, click the Refresh button.
Du coup, impossible de revenir en arrière sans remplir à nouveau le mot de passe et le login.
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 15h45   #18
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
enfin, si je fais actualiser, ça marche mais s'il faut le faire à chaque fois...
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 15h53   #19
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 817
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 817
Points : 636
Points : 636
Ce warning, c'est normal.

Il apparait lorsque tu fait "Retour" vers une page qui a envoyé des données par POST.

Car si tu fait "Retour" sur une telle page, les données sont postées à nouveau. Et donc, si par exemple tu viens d'acheter une voiture sur internet, tu te retrouves avec 2 voitures achetées.

D'où l'interet de rediriger sur une autre page apres identification (comme la pluspart des forums)
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h48.


 
 
 
 
Partenaires

Hébergement Web