Bonjour a tous,

je suis en train de monter un serveur http php mysql, et de ce coté la tout fonctionne bien, pas toujours sans souci mais ca vient doucement.

Depuis 2 jours j'essais de trouver des fils ou tutos sur mon souci du moment, sans succes,j'explique :

j'ai créé sur le serveur une page qui permet de s'authentifier avec son login et son mdp, et si tout est bon (login + mdp) alors je voudrai que le serveur authorise l'accès aux dossiers restreints pour lesquels le groupe de l'utilisateur est authorisé.

Alors j'ai essayé ceci :
j'envois le login dans une variable de session, ainsi que le groupe de la personne loggée.

Le souci est que les variables session sont bien créées et ont les bonnes infos, mais quand l'utilisateur veut aller dans un dossier restreint (meme juste après s'être authentifié) et bien le serveur envoit une requete d'authentification, comme si l'utilisateur était inconnu du serveur.


Pourriez-vous m'aider ?????

D'avance merci
tu fait ca comment ?
En php ?

Si c'est le cas : vérifie que tu as bien appelé session_start() (au début du script) et que tu met $_SESSION et pas $_session (en majuscule) ca peut paraitre bête ... mais souvent, les erreurs qu'on cherches le plus longtemps, c'est des erreurs de ce genre !

Si c'est par ftp : dis nous quel serveur tu utilises !
a alexip,

oui j'ai fait ca en php,
j'ai bien mis session_start() sur la page d'accueil du serveur, page depuis laquelle on accede à la page pour s'identifier.
et oui j'ai bien écrit $_SESSION pour déclarer mes variables.

par contre tu me donnes un doutes, faut-il ecrire le session_start() sur chacune des pages disponibles sur le serveur ?
ou alors, tant que l'utilisateur ne ferme pas sa session celle-ci reste ouverte et donc le session_start() actif ?

j'ai fait l'essai sur une page qui n'a pas de session_start(), mais en y accedant depuis la page d'accueil (donc avec un session_start()) et j'arrive bien à recuperer les variables et surtout leur valeur.

tu as une autre idée ????
Salut,
Je pense que tu devrais poser ta question sur un forum de developpement comme developpez.com, tu aurais surement des réponses plus rapides et pertinentes a ce sujet, sinon tu peux toujours utiliser l'authentifiaction http. Tu trouveras de la doc facilement pour ça.
baptistoux wrote:Salut,
Je pense que tu devrais poser ta question sur un forum de developpement comme developpez.com, tu aurais surement des réponses plus rapides et pertinentes a ce sujet, sinon tu peux toujours utiliser l'authentifiaction http. Tu trouveras de la doc facilement pour ça.
Pas besoin ...

@fredouille : oui, tu doit mettre session_start() au début de chaque page !
Pas au début de chaque fichier php, (pas dans chaque include) mais bien avant chaque page !
a baptistoux,

merci pour ces deux propositions, je vai essayer par la et posterai un message sur ce fil si je trouves une solutionn avec tes deux propositions.

Merci A++++++
a alexip,

je viens de ré-essayer en rajoutant session_start() en 1ere ligne d'une page php située dans un dossier restreint liée depuis la page d'accueil, mais ien n'a changé, le serveur demande une authentification.

je precise que toutes mes pages sont en php, est-ce une mauvaise idée ?


je sais vraiment pas quoi faire.......
Ok ...
Quand tu dis "une page php située dans un dossier restreint", c'est la page ou le dossier qui est restreint ?
Comment bloques-tu l'accès à ces fichiers/dossiers ?

Si tu pouvais poster tes scripts (ou seulement la partie foireuse) ... c'est pas facile de débugger sans voir les sources ...
a alexip,

voici mon fichier de conf :
<Location /HUMOUR>
Options +Indexes +Includes +FollowSymLinks
AuthType Basic
AuthName "ACCES PRIVE"
AuthMySQLHost localhost
AuthMySQLDB ma_database
AuthMySQLUserTable ma_table
AuthMySQLEnable On
# require valid-user
AuthMySQLUser utilisateur
AuthMySQLPassword mon_mdp
AuthMySQLNameField user_name
AuthMySQLPasswordField utilisateur_mdp
AuthMySQLNoPasswd Off
AuthMySQLPwEncryption none
AuthMySQLGroupTable ma_table
AuthMySQLGroupField utilisateur_group
# AuthMySQLKeepAlive Off
AuthMySQLAuthoritative On
<Limit GET POST>
require group utilisateur
</limit>
</Location>
et voici le script de login :
// on verifie que le login utilisateur n'est pas deja utilisé
$login = mysql_query('SELECT COUNT(*) AS nom FROM ma-table WHERE utilisateur=\'' . $user_name . '\'') or die(mysql_error());
$donnees_login = mysql_fetch_array($login);
if ($donnees_login['nom'] == 1) // Le login est dans la table
{
// on verifie le mot de passe de l'utilisateur
$mot_de_passe = mysql_query('SELECT utilisateur_mdp FROM user_info WHERE utilisateur=\'' . $user_name . '\'') or die(mysql_error());
$donnees_mot_de_passe = mysql_fetch_array($mot_de_passe);
$_SESSION['utilisateur'] = $user_name;
$_SESSION['user_group'] = $donnees_group['user_group'];
}
voila, j'espere que ca pourra aider pour trouver mon erreur
Heu ...
Si j'ai bien compris, tu essaye de loggé l'utilisateur sur ton serveur http par php ...

Mais, es-tu sur que les sessions php sont compatibles avec les authentifications http ??

J'ai jamais vus ca !

Si j'était toi, je metterais une redirection par header, si les user/passwd sont bons, vers http://user:passwd@ton.site/HUMOUR !
En t'arrengeant, bien sûr, pour que les user et passwd ne s'affichent pas (ou au moin en clair) dans l'historique de naviguation des clients ...
a alexip,

hop la, doucement, la tu me parles de choses qui sont un peu balaises pour moi je débute, j'arrive a faire tourner un serveur, ok, mais de la a savoir si il est possible avec les sessions php de s'authentifier en http, j'en sais rien.

j'ai lancé ce fil pour justement trouver une réponse a cette question, mais je vois pas pourquoi on pourrait pas le faire, on arrive bien a piloter mysql par php et les fichiers group comme users sont des tables mysql, donc si on peut authentifier un user qui est stocké sur mysql pour acceder a un serveur http, je vois pas pourquoi en php on ne pourrait pas authentifier unuser du serveur http.

et sur ta proposition que je viens de tester, ca fonctionne tres bien si le client rentre directement som login et mdp dans son adresse, mais j'ai essayé depuis un lien sur une page, et le serveur redemande son authentification.

sans parler que cacher le login et le mdp dans l'historique du client, la je vois meme pas comment on peut faire......

merci en tout cas pour cette proposition
J'vois pas ou est le problème ...

Une fois l'user/passwd vérifié (c'est pas obligatoire !), tu fait :
header('Location: http://'.$login.':'.$passwd.'@tonserveur/HUMOUR');
C'est pas compliqué !
Et je suis sur que ca fonctionne et que ca n'affiche pas les login/passwd (je vient de tester) !
a alexip,

ok merci, je comprends bien ta proposition (qui fonctionne d'ailleurs), mais j'ai plusieurs dossiers "restreints",

egalement, sur la doc http, il y a un exemple ou c'est mysql qui authorise l'authentification, mais j'arrive pas a la faire fonctionner.

je prefererai essayer d'avoir une solution plus, ne le prends pas mal, "rigoureuse", mais je garde tout de meme ta solution au cas ou je n'en trouve pas d'autre, merci quand meme.....
fredouille wrote:ok merci, je comprends bien ta proposition (qui fonctionne d'ailleurs), mais j'ai plusieurs dossiers "restreints"
Et où est le problème ?
Quand ta session est ouverte, elle le restes !

Sinon, tu peux aussi mettre du php dans ta page 403 ... donc, si la session http n'est pas ouverte pour cet emplacement, il lit les variables de sessions et redirige vers ($login.':'.$passwd.'@tonsite'.$_SERVER['REQUEST_URI']) !

si tu veux du plus "rigoureux",

tu peux tout mettre en php : tu réécrit '/HUMOUR/' vers 'list.php?path=/HUMOUR/' avec le mod_rewirte
Et tu fais la même chose avec tout tes dossiers browsables

Comme ca, tu n'as pas besoin d'athentifications http ...

Ou alors, tu gardes le login normal (celui avec la popup) ...

Sinon, je ne vois pas ...
a alexip,

il n'y a aucune solution pour dire que l'authentification en http est bonne ou pas en fonction d'un code en php ???
pas que je saches ...
Et puis ... ce ne serait pas plus propre !