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 05/02/2007, 18h32   #1
Membre à l'essai
 
Avatar de Orb Dorb
 
Inscription : mai 2005
Messages : 71
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 71
Points : 20
Points : 20
Par défaut Expiration d'un mot de passe

Bonjour à tous.

Après recherches, je me vois dans l'obligation de demander de l'aide ici.

Voilà, j'aimerais que la connexion à une section privée soit refusé si la date d'expiration donné par l'admin est dépassé.

Je travail avec une sesssion et base de donnée.

J'ose imaginer que je n'ai pas à transporter la variable de page en page car la connexion sera accepté ou refusé. Donc, pas besoin de l'enregistrer...juste la vérifier. Si ce n'est pas le cas, j'aimerais le savoir.

Je ne sais juste pas comment m'y prendre.

Voici le code de ma page de login :

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
<?php require_once('../Connections/connex.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
 
  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
 
  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
?><?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}
 
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
  $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}
 
if (isset($_POST['username'])) {
  $loginUsername=$_POST['username'];
  $password=$_POST['password'];
  $MM_fldUserAuthorization = "accesslevel";
  $MM_redirectLoginSuccess = "/admin/index.php";
  $MM_redirectLoginFailed = "/admin/login.php?msg=Veuillez recommencer s.v.p";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_connex, $connex);
 
  $LoginRS__query=sprintf("SELECT username, password, accesslevel FROM users WHERE username=%s AND password=%s",
  GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 
 
  $LoginRS = mysql_query($LoginRS__query, $connex) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
 
    $loginStrGroup  = mysql_result($LoginRS,0,'accesslevel');
 
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;          
 
    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];    
    }
    header("Location: " . $MM_redirectLoginSuccess );
  }
  else {
    header("Location: ". $MM_redirectLoginFailed );
  }
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Untitled Document</title>
</head>
 
<body>
<p>Connexion &agrave; l'espace administratif. <br />
<?php echo $msg ?></p>
<form id="login" name="login" method="POST" action="<?php echo $loginFormAction; ?>">
  <p>nom d'utilisateur
    <input name="username" type="text" id="username" />
</p>
  <p>mot de passe
    <input name="password" type="text" id="password" />
</p>
  <p>
    <input type="submit" name="Submit" value=":: Se connecter ::" />
  </p>
</form>
<p>&nbsp;</p>
</body>
</html>
J'imagine que je dois sélectionner mon champ "expiration" dans la base et le comparer avec 'aujourd'hui' mais ensuite, comment arriver à refuser la connexion si la date est expiré.

Je vois un genre de :

J'ajoute "expiration" à mon select de BD

Ensuite :
$today = date("Y-m-d");
if ($today > expiration) refuser la connexion (donc c'est ici que j'ai besoin d'aide)

Il faut que j'adapte le tout au script que je possède.

Merci à l'avance pour les réponses.
Orb Dorb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2007, 20h44   #2
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
Donc je récapitule ce que j'ai compris :
- Besoin de vérifier si la personne n'est pas rester inactive trop longtemps
- Le cas échéant, la déconnecter.

Pour ceci, quand la personne se connecte tu mets en session le temps maximum d'inactivité (en seconde). (On la note SESSION 1)
Et au même moment tu créais une autre session qui va contenir le time() de sa connection. (On la note SESSION 2)
-> Tu as 2 sessions exprimés en seconde.

Maintenant il va te falloir créer un fichier que tu vas inclure à chaque pages que tu souhaites limitées aux membres dans lequel tu vas vérifier que le time() actuel est inférieur à SESSION 1 + SESSION 2.
Ce qui signifie que la personne est encore connecté. Dans ce cas là, il ne se passera rien.

Dans le cas ou le time() actuel est supérieur à SESSION 1 + SESSION 2, il te faudra exécuté un session_destroy() pour déconnecter la personne (Ou au moins un session_unset()).

Je ne pense pas que ça soit bien compliquer à coder, s'il y a un problème, n'hésite pas .
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 02h13   #3
Membre à l'essai
 
Avatar de Orb Dorb
 
Inscription : mai 2005
Messages : 71
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 71
Points : 20
Points : 20
Merci pour la réponse.

Mais j'ai du mal m'exprimer.

Quand j'enregistre un membre, j'ai un champ à remplir pour la date d'expiration. Cela me permettra d'assigner un accès que pour un temps limité. Ex.: Un accès d'un jour ou une semaine etc...

Donc je veux comparer la date d'expiration dans la base de donnée à celle de la journée en cours. Et si elle dépasse la journée en cours, il n'y a tout simplement pas de connexion possible.

Voilà...

Reste juste à savoir comment faire avec le script plus haut.

Je crois bien que ça se fasse à même cette page.

Désolé pour la complexité de mon explication et merci à l'avance pour un éclaircissement.
Orb Dorb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 12h17   #4
Membre régulier
 
Inscription : janvier 2007
Messages : 85
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 85
Points : 80
Points : 80
Bien que ce que tu demande soit réalisable relativement facilement, il nous faut avoir quelques infos supplémentaires.

Nous allons modifier la façon de fonctionner de ton site et si tu n'y prends pas garde tu peux te retrouver à refuser l'accès à certains membres qui sont déjà enregistrés.

ton site est t'il déjà en production ?
Comment gerer les admins, qui sont aussi des utilisateurs ?
doit t'on prevoir le cas d'un accès illimité dans le temps ?
Que veut tu faire des utilisateurs lorsque leur compte sera obsolète ?
(les supprimer de la base ou desactiver leur compte ?)

Car de cela va dépendre la façon de faire.

@++
p.legal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 18h00   #5
Membre à l'essai
 
Avatar de Orb Dorb
 
Inscription : mai 2005
Messages : 71
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 71
Points : 20
Points : 20
Merci pour la réponse.

Je te réponds dans l'ordre de tes questions.

- oui, il est en production (Ça aurait fait une grosse différence sinon ?)

- pour les admin, il n'y en aura qu'un (la secrétaire) et j'ai un système de niveau d'accès déjà implanté.

- seulement que pour l'admin mais ce n'est pas nécéssaire je veux faire ça au plus simple possible.

- compte tenu que le champs "expiration" de ma base de donnée contient une date, la désactivation devrait se faire automatiquement.
Pour la suppression, je n'y avais pas pensé. Cependant pour le peu que des gens auront accès, ce n'est pas primordiale.

En tout, il va y avoir à peine 10 personnes qui passeront voir par année.
C'est une base de donnée pour une association. Donc il y aura que de la consultation a part bien-sur la secrétaire qui pourra modifier à sa guise.
Mais pour ça, mon système de niveau d'accès est déjà fonctionel.

Soit (guest, member, admin) 3 niveaux.

J'écris beaucoup mais j'essaye de donner le plus d'information possible pour que ce soit plus facile de me venir en aide.

Alors merci encore à l'avance pour la boué.
Orb Dorb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 18h44   #6
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
C'est simple en faite.
Quand la personne s'inscrit, tu récupères le time(), puis tu lui rajoute un temps donné :
Code :
$expiration = time() + 86400;
Donne une expiration le jour suivant (pile poil). (1 semaine = 60 * 60 * 24 * 7)

Bref tu rentres donc cette valeur lors de l'inscription, et quand la personne se connecte, si le time() de sa connection est > a la colonne expiration, alors elle ne peut se connecter.

Pour un accès illimité tu met 0, et tu vérifies :
Code :
1
2
3
si expiration == 0 
alors accès_illimité == vrai
fin si
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 20h26   #7
Membre régulier
 
Inscription : janvier 2007
Messages : 85
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 85
Points : 80
Points : 80
Pour completer la réponse de SpiritOfDoc tu peux effectuer le test dans la condition ci-dessous.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
  if ($loginFoundUser) {
 
    $loginStrGroup  = mysql_result($LoginRS,0,'accesslevel');
 
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;          
 
    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];    
    }
    header("Location: " . $MM_redirectLoginSuccess );
  }
Si l'interpréteur PHP arrive jusque là c'est que l'utilisateur est identifié, reste plus qu'a tester la variable liée au temps.

tu peux pour cela comparer la variable time() actuelle avec celle définie dans le profil du visiteur ($expire).

Tu as donc 3 cas
* $expire=0 acces autorisé
* time()-$expire<0 acces autorisé
* time()-$expire>0 acces refusé

pense à mettre a jour ta requête SQL pour extraire la variable $expire en même temps que le reste.

@++
p.legal 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 20h49.


 
 
 
 
Partenaires

Hébergement Web