[Résolu] Contrôler un accès avec login.

WiseFun
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 01:29

Bonjour,

Je voudrais faire en sorte que la personne qui se connecte avec son login puisse accéder à son dossier de fichiers mais pas aux autres.
Et idem pour un autre login qui pourra accéder à son dossier de fichiers mais pas aux autres.

ci-dessous le code pour le login de connexion.
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
		<link href="base.css" rel="stylesheet" type="text/css"/>
		<title>Index Membres</title>
	</head>
	<?php
	// on teste si le visiteur a soumis le formulaire de connexion
	if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
		if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

			include_once 'connect.php';

			// on teste si une entrée de la base contient ce couple login / pass
			$sql = 'SELECT count(*) FROM membre WHERE login="' . mysql_escape_string($_POST['login']) . '" AND pass_md5="' . mysql_escape_string(md5($_POST['pass'])) . '"';
			$req = mysql_query($sql) or die('Erreur SQL !<br />' . $sql . '<br />' . mysql_error());
			$data = mysql_fetch_array($req);

			mysql_free_result($req);
			mysql_close();

			// si on obtient une réponse, alors l'utilisateur est un membre
			if ($data[0] == 1) {

					session_start();
					$_SESSION['login'] = $_POST['login'];
					header('Location: index.php');
					exit();
		
			}
			// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
			elseif ($data[0] == 0) {
				$erreur = 'Compte non reconnu.';
			}
			// sinon, alors la, il y a un gros problème :)
			else {
				$erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
			}
		} else {
			$erreur = 'Au moins un des champs est vide.';
		}
	}
?>

	<body>
		<div id="global">
			<div id="principal">
				<p>
					Votre Login et Mot de passe vous ont été envoyés.
					<br/>
					Aucune de ces informations n'est stockée sur ce site.
					<br/>
					Elles le sont uniquement sur votre ordinateur par l'intermédaire d'un cookie
					<br/>
					(il vous faut donc vérifier que vous avez paramétré votre navigateur internet de façon à ce qu'il accepte les cookies).
				</p>
				<p></p>
				Connexion à l'espace membre :
				<br />
				<form action="accueil.php" method="post">
					Login :
					<input type="text" name="login" value="<?php
					if (isset($_POST['login']))
						echo htmlentities(trim($_POST['login']));
					?>">
					<br />
					Mot de passe :
					<input type="password" name="pass" value="<?php
					if (isset($_POST['pass']))
						echo htmlentities(trim($_POST['pass']));
					?>">
					<br />
					<input type="submit" name="connexion" value="Connexion">
				</form>
				<?php
				if (isset($erreur))
					echo '
				<br />
				<br />
				', $erreur;
				?>
			</div><!-- fin principal -->
		</div><!-- Fin global -->
	</body>
</html>

Merci
Modifié en dernier par WiseFun le 27 déc. 2011, 23:53, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

27 déc. 2011, 10:16

Son dossier ? C'est quoi pour toi un dossier ?
Une page listant des fichiers qu'il peut télécharger ? Lire ?
Un dossier Apache ?

WiseFun
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 18:18

Bonjour xTg,
Sur mon serveur free, j'ai des dossiers qui sont réservés à des personnes.
Dans ces dossiers il y a un site internet en construction .

Donc je voudrais que depuis la page d'index de mon site sous free, ils rentre leur login et mot de passe et cela les dirigeras directement sur leurs page d'index de leur site.


merci

ViPHP
xTG
ViPHP | 7331 Messages

27 déc. 2011, 18:45

Tu peux utiliser les sessions.

Petit exemple (très simplifié) :
Soit la page login.php permettant d'identifier l'utilisateur, soit page1.php un site et page2.php un autre site.

login.php
<?php
session_start();
$utilisateur = 'utilisateur1';
if( $utilisateur === 'utilisateur1' ){
  $_SESSION['acces_site'] = 1;
  header('Location: page1.php');
}
elseif( $utilisateur === 'utilisateur2' ){
  $_SESSION['acces_site'] = 2;
  header('Location: page2.php');
}else
  echo 'Connexion échouée';
Page1.php :
session_start();
if( !isSet($_SESSION['acces_site']) || (isSet($_SESSION['acces_site']) && $_SESSION['acces_site'] !== 1 )
  header('Location: login.php');
echo 'Votre site';
Page2.php :
session_start();
if( !isSet($_SESSION['acces_site']) || (isSet($_SESSION['acces_site']) && $_SESSION['acces_site'] !== 2 )
  header('Location: login.php');
echo 'Votre site';
Grâce à la variable de session tu indiques le droit d'accès. Tu peux aussi jouer avec un array plutôt qu'une simple valeur afin d'autoriser l'accès à un ou plusieurs sites pour un utilisateur.

WiseFun
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 18:52

Bonjour xTG,

merci pour ton aide.

Je viens de trouvé en faisant que des if.
if ($data[0] == 1) {
					if($_POST['login']== tof)
					{
					session_start();
					$_SESSION['login'] = $_POST['login'];
					header('Location: accueil.php');
					exit();
					}
					if($_POST['login']== unouipourunnom)
					{
					session_start();
					$_SESSION['login'] = $_POST['login'];
					header('Location: Julie/index.html');
					exit();
					}
					if($_POST['login']== gs)
					{
					session_start();
					$_SESSION['login'] = $_POST['login'];
					header('Location: GSAE/index.php');
					exit();
					}
					if($_POST['login']== gsae77)
					{
					session_start();
					$_SESSION['login'] = $_POST['login'];
					header('Location: GSAE/index.php');
					exit();
					}
			}
mais ton code est plus présentable que le mien.

Merci pour tout

Bonnes fêtes de fin d'années.

WiseFun
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 19:26

Bonjour,sur mon serveur localhost tout fonctionne.

Mais pas sur le serveur free.
voici les erreurs
Warning: session_start() [function.session-start]: open(/mnt/170/sdc/9/d/linuxserveur/sessions/sess_f738b3676f3a64af4d2ce756eca9f4c5, O_RDWR) failed: No such file or directory (2) in /mnt/170/sdc/9/d/linuxserveur/index.php on line 27

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/170/sdc/9/d/linuxserveur/index.php:8) in /mnt/170/sdc/9/d/linuxserveur/index.php on line 27

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/170/sdc/9/d/linuxserveur/index.php:8) in /mnt/170/sdc/9/d/linuxserveur/index.php on line 27

Warning: Cannot modify header information - headers already sent by (output started at /mnt/170/sdc/9/d/linuxserveur/index.php:8) in /mnt/170/sdc/9/d/linuxserveur/index.php on line 29

Warning: Unknown(): open(/mnt/170/sdc/9/d/linuxserveur/sessions/sess_f738b3676f3a64af4d2ce756eca9f4c5, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/mnt/170/sdc/9/d/linuxserveur/sessions) in Unknown on line 0

ça veut dire quoi tout ça ?

merci

WiseFun
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 19:34

Bonjour,

j'avais oublié que sous free il fallait créer un dossier sessions sur la racine du site.

mais même avec ce fichier j'ai ces erreurs.

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/170/sdc/9/d/linuxserveur/index.php:8) in /mnt/170/sdc/9/d/linuxserveur/index.php on line 27

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/170/sdc/9/d/linuxserveur/index.php:8) in /mnt/170/sdc/9/d/linuxserveur/index.php on line 27

Warning: Cannot modify header information - headers already sent by (output started at /mnt/170/sdc/9/d/linuxserveur/index.php:8) in /mnt/170/sdc/9/d/linuxserveur/index.php on line 29
merci

ViPHP
xTG
ViPHP | 7331 Messages

27 déc. 2011, 19:36

Tu as un session_start à la ligne 8 et un autre à la ligne 27.

WiseFun
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 19:41

bonjour xTG,

oui c'est mes if car j'ai remis à chaque fois sessions_start.

je vais régler le problème.


Merci

WiseFun
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 19:51

Bonjour,

voici mon code entier de la page index.ph
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
		<link href="base.css" rel="stylesheet" type="text/css"/>
		<title>Index Membres</title>
	</head>
	<?php
	// on teste si le visiteur a soumis le formulaire de connexion
	if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
		if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

			include_once 'connect.php';

			// on teste si une entrée de la base contient ce couple login / pass
			$sql = 'SELECT count(*) FROM membreslinux WHERE login="' . mysql_escape_string($_POST['login']) . '" AND pass_md5="' . mysql_escape_string(md5($_POST['pass'])) . '"';
			$req = mysql_query($sql) or die('Erreur SQL !<br />' . $sql . '<br />' . mysql_error());
			$data = mysql_fetch_array($req);

			mysql_free_result($req);
			mysql_close();

			// si on obtient une réponse, alors l'utilisateur est un membre
			if ($data[0] == 1) {
					session_start();
					$_SESSION['login'] = $_POST['login'];
					header('Location: accueil.php');
					exit();
			}
			// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
			elseif ($data[0] == 0) {
				$erreur = 'Compte non reconnu.';
			}
			// sinon, alors la, il y a un gros problème :)
			else {
				$erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
			}
		} else {
			$erreur = 'Au moins un des champs est vide.';
		}
	}
?>

	<body>
		<div id="global">
			<div id="principal">
				<p>
					Votre Login et Mot de passe vous ont été envoyés.
					<br/>
					Aucune de ces informations n'est stockée sur ce site.
					<br/>
					Elles le sont uniquement sur votre ordinateur par l'intermédaire d'un cookie
					<br/>
					(il vous faut donc vérifier que vous avez paramétré votre navigateur internet de façon à ce qu'il accepte les cookies).
				</p>
				<p></p>
				Connexion à l'espace membre :
				<br />
				<form action="index.php" method="post">
					Login :
					<input type="text" name="login" value="<?php
					if (isset($_POST['login']))
						echo htmlentities(trim($_POST['login']));
					?>">
					<br />
					Mot de passe :
					<input type="password" name="pass" value="<?php
					if (isset($_POST['pass']))
						echo htmlentities(trim($_POST['pass']));
					?>">
					<br />
					<input type="submit" name="connexion" value="Connexion">
				</form>
				<?php
				if (isset($erreur))
					echo '
				<br />
				<br />
				', $erreur;
				?>
			</div><!-- fin principal -->
		</div><!-- Fin global -->
	</body>
</html>

je n'ai pas de session_start en ligne 8.

mais bien en ligne 25.

merci.

WiseFun
Invité n'ayant pas de compte PHPfrance

27 déc. 2011, 23:52

Bonjour,

j'ai trouvé la solution pour free.fr

un fichier .htaccess

et un fichier .htpasswd différent pour chaque utilisateurs.

Voilà tout est ok.