Tout verrouiller

Comment protéger par mot de passe des rubriques ou des articles

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Comment sans bidouiller dans le noyau de Spip on peut à l’aide des mots clés des boucles et de php placer des articles et des rubriques en acces protégé.

Introduction : protéger son site avec SPIP

Restreindre l’accès à certaine partie de son site semble un besoin récurrent des webmasters de sites sous SPIP. Plusieurs solutions existent, la plus classique étant celle expliquée (un peu succintement) sur le site officiel qui permet de réserver certaines parties du site aux seuls membres authentifiés (rédacteurs ou visiteurs enregistrés). Ici nous allons détailler une autre méthode, à l’aide des mots clés, qui est loins d’être parfaite, mais qui suffira largement dans la plupart des cas simples.

Qu’est-ce que cette contrib permet de faire ?

Permettre aux administrateurs du site de placer certains articles
ou certaines rubriques en accès par mot de passe.

On pourra avec ceci créer autant de mots de passe que l’on voudra.
Protéger la rubrique les saucisses avec le mot de passe sauciflon sec
et la rubrique jambon avec le mot de passe jamblon sec.

Je protégerai pas mon compte en banque avec mais ça risque d’être suffisant pour la plupart
des besoins.
Plus precisement, allez voir un peu plus loin dans l’article : Les limitations du systeme.

C’est surtout très facile a mettre en place.

Installation

moins de 5 minutes
-  Décompresser acces.zip et installer controle_acces_rubrique.html controle_acces_rubrique.php3
controle_acces_article.html controle_acces_article.php3 FA2.php3 et enregistre_session2.php3 à
la racine de votre site.

-  Créer un groupe de mot clé que vous appelerez « acces multiple »,vous cocherez les bonnes cases
pour que ce groupe ne soit accessible qu’aux administrateurs et puissent être associés aux articles et
aux rubriques.

-  Notez soigneusement le numéro id_groupe de ce groupe de mots clés, vous en avez impérativement
besoin !!! nous le nommerons désormais <votre id_groupe>
(attention ne confondez pas id_mot avec id_groupe)

-  dans ce groupe créer 2 mots « sauciflon sec » et « jamblon sec »

-  puis au TOUT DÉBUT (cad à la premiere ligne au premier caractère) de article.html
placer ce code.

<INCLURE(controle_acces_article.php3){id_groupe=<votre id_groupe>}{id_article}>

-  puis au TOUT DÉBUT (cad à la premiere ligne au premier caractere) de rubrique.html
placer ce code.

<INCLURE(controle_acces_rubrique.php3){id_groupe=<votre id_groupe>}{id_rubrique}>
  1. Choisissez un article ou une rubrique de votre choix , associez le mot « sauciflon sec » et cliquez
    sur aller voir en ligne. Rentrer « sauciflon sec » dans le Formulaire d’Accès (FA) et si tous se passe bien votre article
    ou votre rubrique apparaît.

Et voila c’est fini

Et pour les courageux voici

Les Explications

Nous présenterons ce travail en deux temps

-  Temps 1 : on implémentera un accès restreint pour les articles seulement
car c’est plus facile.
-  Temps 2 : En se servant de ce qui a été fait au temps 1
on implémentera l’accès restreint pour les rubriques, ce qui exige une démarche
d’acquisition des informations qui peuvent être éventuellement présentes
dans les rubriques parentes.

Temps 1

-  controle_acces_article.html

<BOUCLE_acces(MOTS){id_groupe}{id_article}{0,1}>
<?php $acces='#TITRE'; ?>
</BOUCLE_acces>
<?php
//si la variable $acces a ete cree alors on lance le script
//cad si un acces restreint est bien associé a l'article
    session_start();
    //echo "variable de session".$_SESSION['$acces'];
if (isset($acces)){
    //recuperation du nom de script avec les arguments de requettes
    $origine=$HTTP_SERVER_VARS['SCRIPT_NAME']."?".$HTTP_SERVER_VARS['QUERY_STRING'];
    //on demarre une session

    //et on verifie si la variable $acces
    //est bien presente dans le contexte de session
    //et si le temps qu'elle contient n'est pas trop vieux
    //cad depasse de 5 minutes
    if ( isset($_SESSION['$acces']) and ( (date("U")-$_SESSION['$acces']) < 10 )and ($_SESSION['demande_enregistrement']==$acces) ){

        //on raffraichit la valeur
        //et on l'enregistre dans le contexte de session
        $_SESSION['$acces']=date("U");
    }else{
        //l'utilisateur n'a pas ete enregistre ou sa date d'enregistrement est trop vielle
        //on efface $$acces du contexte de session
        unset($_SESSION['$acces']);
        // a la place on enregistre une variable demande_enregistrement dont la
        //valeur depend de acces
        $_SESSION['demande_enregistrement']=$acces;
        //on dirige l'utilisateur vers le FA en sauvant son article demande
        header("location: FA2.php3?origine=$origine");
    }
}

Attention il ne doit y avoir aucun espace entre le début du fichier et ce script
car on fait appel à la fonction header qui ne peut être appelé que si aucune information
n’a été expédié au navigateur avant son invocation.

-  Le FA ou Formulaire d’Accès

Il est sans mystère voici son code FA2.php3
Il va collecter un mot de passe qui sera envoyé à un script de contrôle et d’enregistrement

<?php
//correspond a l'article demandé
$origine=$HTTP_GET_VARS['origine'];
//Si le mot de passe est erronée on renvoie ce message
$erreur=$HTTP_GET_VARS['erreur'];
?>
<html>
<body onload="mdp.getFocus()">
<?php if(isset($erreur)) echo $erreur; ?>

<div style='position:absolute;top:30%;left:30%'>
<form action="enregistre_session2.php3?origine=<?php echo $origine; ?>" method="POST" >
<p>l'acces a cette rubrique (ou article) est protégé par un mot de passe</p>
<input type=password name="mdp">
<input type=submit value="valider">
</form><br>
<a href="sommaire.php3">Retour au site publique</a>
</div>
</body>

-  Puis le script d’enregistrement

enregistre_session.php3

<?php
$origine=$HTTP_GET_VARS['origine'];
$mdp=$HTTP_POST_VARS['mdp'];
session_start();
//on recupere la demande d'enregistrement à $acces
$acces=$_SESSION['demande_enregistrement'];
//debug echo "mdp: $mdp acces : $acces";
if ($mdp==$acces){
    $_SESSION['$acces']=date("U");
    //debug echo "valeur de _SESSION  est ".$_SESSION['$acces'];
    header("location: $origine");
}else{
    $erreur="votre mot de passe est erroné votre administrateur l'a peut-etre change";
    header("location: FA2.php3?erreur=$erreur&origine=$origine");
}
?>

Ce script récupère la demande d’enregistrement qui est une variable de session qui contient le titre
du mot clé. Puis il compare cette valeur avec le mot de passe entré dans FA2.php3 si celui-ci est
bon il crée la variable de session $acces qui contient la date à laquelle l’utilisateur s’est enregistré

Et voila l’affaire est dans le sac si vous m’avez lu jusque
la je félicite votre patience :)

Temps 2 : généralisations aux rubriques

La généralisations aux rubriques est un peu plus subtile car il faut
pouvoir gérer les problèmes d’acquisition (qui sont très bien gérées dans Zope par ailleurs)

En effet si une rubrique se trouve être la sous rubrique d’une rubrique en accès par mot de passe
elle doit pouvoir hériter de ses propriétés. Tous les articles d’une telle rubrique aussi.

Ce qui va se résoudre à coup de boucle hiérarchie.

controle_acces_rubrique.html

<?php
    //vérifie si une rubrique parente
    //est en acces par mot de passe
?>
<BOUCLE_contexte_rubrique(RUBRIQUES){id_rubrique}>
<BOUCLE_hierarchie_acces(HIERARCHIE){id_rubrique}>
<BOUCLE_parent_acces(MOTS){id_rubrique}{id_groupe}>
<?php $acces='#TITRE'; ?>
</BOUCLE_parent_acces>
</BOUCLE_hierarchie_acces>
</BOUCLE_contexte_rubrique>
<?php
    //vérifie si la rubrique elle meme
    //est en acces par mot de passe
?>
<BOUCLE_acces_rubrique_simple(MOTS){id_rubrique}{id_groupe}>
<?php $acces='#TITRE'; ?>
</BOUCLE_acces_rubrique_simple>
<?php
//si la variable $acces a ete cree alors on lance le script
//cad si un acces restreint est bien associé a la rubrique
    session_start();
    //echo "variable de session".$_SESSION['$acces'];
if (isset($acces)){
    //recuperation du nom de script avec les arguments de requettes
    $origine=$HTTP_SERVER_VARS['SCRIPT_NAME']."?".$HTTP_SERVER_VARS['QUERY_STRING'];
    //on demarre une session

    //et on verifie si la variable $acces
    //est bien presente dans le contexte de session
    //et si le temps qu'elle contient n'est pas trop vieux
    //cad depasse de 5 minutes
    if ( isset($_SESSION['$acces']) and ( (date("U")-$_SESSION['$acces']) < 10 ) and ($_SESSION['demande_enregistrement']==$acces)){

        //on raffraichit la valeur
        //et on l'enregistre dans le contexte de session
        $_SESSION['$acces']=date("U");
    }else{
        //l'utilisateur n'a pas ete enregistre ou sa date d'enregistrement est trop vielle
        //on efface $$acces du contexte de session
        unset($_SESSION['$acces']);
        // a la place on enregistre une variable demande_enregistrement dont la
        //valeur depend de acces
        $_SESSION['demande_enregistrement']=$acces;
        //on dirige l'utilisateur vers le FA en sauvant son article demande
        header("location: FA2.php3?origine=$origine");
    }
}

et on fait pareil avec controle_acces_article.html

<?
    //verifie si la rubrique ou rubrique parente contenant
    //l'article est en acces par mot de passe
?>
<BOUCLE_contexte_article(ARTICLES){id_article}>
<BOUCLE_contexte_rubrique(RUBRIQUES){id_rubrique}>
<BOUCLE_hierarchie_acces(HIERARCHIE){id_rubrique}>
<BOUCLE_parent_acces(MOTS){id_rubrique}{id_groupe}>
<?php $acces='#TITRE'; ?>
</BOUCLE_parent_acces>
</BOUCLE_hierarchie_acces>
</BOUCLE_contexte_rubrique>
</BOUCLE_contexte_article>
<?
    //verifie si la rubrique ou rubrique parente contenant
    //l'article est en acces par mot de passe
?>
<BOUCLE_acces_article_simple(MOTS){id_groupe}{id_article}{0,1}>
<?php $acces='#TITRE'; ?>
</BOUCLE_acces_article_simple>
<?php
//si la variable $acces a ete cree alors on lance le script
//cad si un acces restreint est bien associé a l'article
    session_start();
    //echo "variable de session".$_SESSION['$acces'];
if (isset($acces)){
    //recuperation du nom de script avec les arguments de requettes
    $origine=$HTTP_SERVER_VARS['SCRIPT_NAME']."?".$HTTP_SERVER_VARS['QUERY_STRING'];
    //on demarre une session

    //et on verifie si la variable $acces
    //est bien presente dans le contexte de session
    //et si le temps qu'elle contient n'est pas trop vieux
    //cad depasse de 5 minutes
    if ( isset($_SESSION['$acces']) and ( (date("U")-$_SESSION['$acces']) < 10 ) and ($_SESSION['demande_enregistrement']==$acces)){

        //on raffraichit la valeur
        //et on l'enregistre dans le contexte de session
        $_SESSION['$acces']=date("U");
    }else{
        //l'utilisateur n'a pas ete enregistre ou sa date d'enregistrement est trop vielle
        //on efface $$acces du contexte de session
        unset($_SESSION['$acces']);
        // a la place on enregistre une variable demande_enregistrement dont la
        //valeur depend de acces
        $_SESSION['demande_enregistrement']=$acces;
        //on dirige l'utilisateur vers le FA en sauvant son article demande
        header("location: FA2.php3?origine=$origine");
    }
}

Limitations du système

-  Un accès par http://mon_site.org/mot.php3?id_mot=XX permet de deviner le mot de passe en incrémentant simplement XX à partir de 1, sur un site contenant peu de mots clés, facile de le trouver, pour remedier à cela il faut supprimer le couple de fichiers mot.php3/mot.html, et y repenser en cas de mise à jour de SPIP.
Ou alors dans le squelette mots.html modifier la Boucle MOTS : <BOUCLE_de_mots(MOTS){les criteres deja present}{id_groupe!=<groupe  des codes secret>}>

-  Il faut s’assurer que les divers squelettes alternatifs ou récapitulatifs (backend, resume, nouveautes, /oo, imprimer, plan, recherche, etc...) n’afficheront pas d’articles qui exigent un mot de passe. C’est très frustrant pour un visiteur de se faire présenter une liste d’articles dont on lui refuse l’accès. Pour cela il faudra exclure les articles correspondants :
Par exemple a l’aide d’une première boucle et du critère doublons :

<BOUCLE_articlesproteges(ARTICLES){les criteres deja present}{id_groupe!=<groupe  des codes secret>}{doublons}></BOUCLE_articlesproteges>
<BOUCLE_principale(ARTICLES){mes criteres}{doublons}>...</BOUCLE_principale>
 

-  Il faut penser à ajouter quelques directives dans son fichier robots.txt pour que Google et compagnie n’indexent pas des articles accessibles par mot de passe.

Ouf, quel travail pour protéger quelques articles !

Discussion

59 discussions

  • 6

    bonjour,
    l’idée est bonne mais je n’y arrive pas.
    y aurait-il une astuce non signalée ?
    cordialement
    Philippe

    • si vous voulez de l’aide via le forum merci de poser des questions précises (en plus ça permet d’améliorer l’article après)

    • Je suis daccord avec Dorian un peu plus de precisions dans votre echec nous aiderait bien. Sinon quelques precision classiques.

      Votre impléméntation de php doit supporter les sessions, vous devez vous etre assuré que partout ou dans l’article on vous indique de ne pas laisser d’espace blanc au debut du fichier vous ayez scrupuleusement respecté cette indication. Par ailleurs certains de mes amis utilisant easyphp m’ont signalé que ca buggait car mon serveur apache sur la mandrake ne considere pas un espace blanc de la meme maniere que celui de easyphp

      J’ai donc refait un fichier qui marche pour easy et pour le reste , vous le trouverez en piece jointe a cette article : acces_easy.zip, refaite la procedure.

      Bon courage

      Michael

    • Bonjour,
      Après avoir suivi les indications de l’article, Apache me sort des Warnings lors de l’accès à ma rubrique protégée (cf ci-dessous), et surtout l’accès ne demande pas le mot de passe affecté :-( (pas de FA). Merci pour toute info utile !

      Apache + PHP sous une Mandrake 9.1, browser Galeon 1.3.5.

      Warning : session_start() [function.session-start] : Cannot send session cache limiter - headers already sent (output started at /home/alex/public_html/CACHE/d/con-1-2.54f655:5) in /home/alex/public_html/CACHE/d/con-1-2.54f655 on line 10

      Warning : Cannot modify header information - headers already sent by (output started at /home/alex/public_html/CACHE/d/con-1-2.54f655:5) in /home/alex/public_html/CACHE/d/con-1-2.54f655 on line 34

    • Il s’agit simplement du fait que la redirection vers le formulaire d’enregistrement n’a pas pu avoir lieu parceque que tu n’as pas mis le code indiqué au « »tout« » debut de ton script, meme un simple caractere blanc provoque ce comportement.

      Essaye aussi avec le zip acces_easy
      @+

    • j’ai le même erreur que toi : OS Red Hat 9 et comme navigateur mozilla :(

    • J’utilise cet contrib sur notre site intranet et ca marche tres bien.

      Seul probleme :
      Meme si le repertoire /IMG est protege par htaccess il est toujours possible d’acceder aux fichiers (documents) qui se trouvent dans une page avec acces protege.
      Bien sur il faut connaitre le nom du fichier.
      Quelqu’un aurait trouve une astuce pour eviter ceci ?
      Merci !

    Répondre à ce message

  • Bonjour
    (sous spip 1.6)
    suite à des modifications sur notre serveur académique : Il faut savoir que nous sommes passé de apache-1.3 à apache-2
    mais la version de PHP est rigoureusement la même (4.3.10), avec la même configuration
    cette contrib que j’avais installé depuis le début ne fonctionne plus.
    Les messages type renvoyés sont :

    Warning : session_start() : Cannot send session cache limiter - headers already sent (output started at /home/www/html/iennyons/neo_site/CACHE/con-15-61.a6ceb1:7) in /home/www/html/iennyons/neo_site/CACHE/con-15-61.a6ceb1 on line 12

    J’ai la preuve que c’est ce qui pose problème puisque lorsque je supprime le code :

    <INCLURE(controle_acces_rubrique.php3{id_groupe=XX}{id_rubrique}>

    je n’ai plus de messages d’erreur

    Comment contourner ce problème ?

    Merci pour vos conseil

    Répondre à ce message

  • 4

    Bonjour

    Je viens d’installer cette contrib. malheureusement cela ne fonctionne pas vraiment :

    Sous Easyphp en locale, cette ligne d’erreur apparraît :

    Warning : Cannot send session cache limiter - headers already sent (output started at c :\program files\easyphp\www\alpc-extranet\inc-public.php3(53) : eval()’d code:2) in c :\program files\easyphp\www\alpc-extranet\inc-public.php3(20) : eval()’d code on line 4

    En ligne, j’ai beau taper le bon code, c’est toujours la page de FA qui reste à l’écran. Par contre la ligne de l’adresse c’est ainsi modifiée :

    http://www.xxx.fr/xxx/FA2.php3?erreur=votre%20mot%20de%20passe%20est%20erroné%20votre%20administrateur%20l’a%20peut-etre%20change&origine=

    J’ai l’impression que l’enregistrement de session ne peut pas se faire... Y’a-t-il une solution ?

    Merci

    SB

    • mtcocktail

      Je confirme j’ai la même erreur. et malheureusement comme une ligne est envoyé en trop dans le inc-public on ne peut pas faire de travail sur les sessions. Ce qui est marrant c’est que si vous êtes déjà authentifier dans l’espace d’admin, vous avez votre cookie d’admin en place et du coup le inc-public ne renvoie pas de ligne en trop. Et la contrib fonctionne dans ce cas là.

      But du jeux trouver la ligne ecrite dans le code de spip qui provoque une impossibilité de renvoyer une entête dans les squellettes.

    • pareil, est-ce que quelqu’un a pu trouver l’origine du problème ?

      existe-t’il d’autres moyens de limiter l’accès des certaines pages à certains utilisateurs seulement ?

    • alors effectivement, c’est un « bug » tordu, quand on est cookifié en tant qu’admin tout se passe bien, mais sinon on a cette erreur d’headers deja envoyés.
      La solution pour contourner ce problème, c’est d’ajouter sur la page d’accueil de votre site (usuellement sommaire.html) un pti bout de code qui va affecter un cookie admin bidon.
      Pas de danger, impossible d’acceder a l’interface d’admin avec juste ce cookie.
      voici donc le code a mettre tout en haut de votre fichier sommaire.html (cad a partir de la 1re ligne) :

      ?php
      if (empty($_COOKIE["spip_admin"])) {
      	setcookie("spip_admin","@fake");
      }
      ?>

      Voila, chez moi ca marche nickel
      A+

    • petit patch pour le fix ci dessus ! :P
      ne pas mettre @ dans la valeur du cookie spip admin, car cela fait apparaitre les boutons « recalculer » et « espace privé » (sans toutefois permettre l’acces a l’espace privé). Il suffit de mettre n’importe quoi d’autre ; ie :

      <?php
      if (empty($_COOKIE["spip_admin"])) {
      	setcookie("spip_admin",".fake");
      }
      ?>

      a+

    Répondre à ce message

  • 2

    Pour dissocier le mot-cle (appartenant au groupe de mot-clés réservé à la protection) qui sert a protéger une rubrique ou un article et le code d’acces qui sera donné par l’utilisateur,
    Il a été modifié le fichier enregiste_session.php3

    Deux rubriques sont actuellement protégée l’une par le motclé1, l’autre par motclé2.

    La premiere rubrique à laquelle a été associée le motclé1 est accessible par le code1 ou le code2
    La deuxième rubrique à laquelle a été associée le motclé2
    est accessible par le code2 uniquement ;

    Voici la modification du fichier

    enregistre_session_exemple.php3

    <?php
    
    $origine=$HTTP_GET_VARS['origine'];
    
    $mdp=$HTTP_POST_VARS['mdp'];
    
    session_start();
    
    //on recupere la demande d'enregistrement à $acces
    
    $acces=$_SESSION['demande_enregistrement'];
    
    // debug echo "mdp: $mdp acces : $acces";
    
    // debug echo "origine $origine";
    
    if ($acces=="motclé1") 
    
    {
    
     if (($mdp=="code1")  or ($mdp =="code2") )
    
        {
    
         $_SESSION['$acces']=date("U");
    
        //debug echo "valeur de _SESSION  est".$_SESSION['$acces'];
    
        header("location: $origine");
    
         }
    
      }
    
    elseif (($acces=="motclé2") and ($mdp=="code2"))
    
        {
    
        $_SESSION['$acces']=date("U");
    
        //debug echo "valeur de _SESSION  est ".$_SESSION['$acces'];
    
        header("location: $origine");
    
        }
    
    
    else
    
    {
    
        $erreur="votre mot de passe est erroné votre administrateur l'a peut-etre change";
    
        header("location: 
    FA2.php3?erreur=$erreur&origine=$origine");
    
    }
    
    ?>
    • bilboïd

      ça ne fonctionne toujours pas sous Spip 1.8.1 ou me trompe-je ?

    • mtcocktail

      ouai fonctionne pas ....

    Répondre à ce message

  • 2
    Nathalie

    Bonjour,

    J’ai installé cette contrib sur mon site et bizarrement, parfois, le mot de passe est refusé (réponse : Votre mot de passe est erroné. Le webmaster l’a peut-être changé.). Sur IE6 notamment mais pas sur tous les postes. Sur Firefox, aucun problème.
    Quelqu’un a-t’il rencontré ce problème ? (je précise que je suis certaine de ne pas faire de faute de frappe ! pas 6 fois de suite...)
    Mon site est hébergé chez Free.

    Merci d’avance pour votre aide.

    • Nathalie

      Une précision : en étant connecté comme administrateur, le mot de passe est accepté.

    • Bonjour,
      j’ai installé cette contrib pour mon site mais il semblerait qu’un personne ait eu accès à tous les articles protégés sans avoir à tapper un mot de passe. Elle tournait sous windws NT4 et IE 5.5. Je suis également chez Free. En dehors de cette personne, je n’ai pas eu d’autres cas mais cela me laisse penser qu’il y a une faille relativement grande (ou alors que je me sois trompé dans l’intégration du code ce qui est fort possible ^-^).

    Répondre à ce message

  • 2

    J’attends que la 1.8 soit stabilisé avant de faire la MAJ

    Merci de ne plus poster de question sur le passage 1.8 tant que je n’ai pas fait cette MAJ, je pense que celle-ci sera faite aux alentours du lundi 18 avril

    En attendant soit vous ne posez pas de question soit vous ne passez pas en 1.8

    Merci

    • Ca y est ? ON va avoir un nouveau script pour Spip 1.8.1 ?
      J’suis impatient :-)

    • bilboïd

      Toujours rien :’(

    Répondre à ce message

  • 1

    J’ai bien cru que j’y arriverai ce coup-ci...

    Tout à l’air de fonctionner, sauf qu’après la demande du mot de passe, j’ai une erreur 404 (file not found... ah, vous connaissez ?)

    En fait, le navigateur essaie d’ouvrir une adresse relative (qui est effectivement l’adresse de l’article n°25 voulu, mon site SPIP étant placé dans le sous-répertoire DYNA) :

    /dyna/enregistre_session2.php3 ?origine=/dyna/article.php3 ?id_article=25

    et me dit :

    The requested URL /dyna/article.php3 was not found on this server.

    Si je reviens en arrière et que je ré-esssaie d’accéder à l’article ou à la rubrique, j’y arrive (la session est bien ouverte)

    J’ai modifié enregistre_session2.php3 de la façon suivante :

    header(« location : $origine »)

    par : header("location : http://blabla.com$origine")

    et ca marche... mais la solution n’est pas très élégante. Y a-t-il un moyen de récupérer l’adresse complète du site dans $origine ? Ou bien de créer une variable stockant le nom du site ? Ou alors je me goure quelque part ?

    J’ai bien butiné à droite à gauche mais je n’y comprends rien, je crois être définitivement fâché avec les variables PHP :-(

    A moins que je ne me sois trompé dans le vidage de cache, cette erreur s’est produite aussi après avoir transféré tout le SPIP à la racine (fournisseur : Free).

    Autre indication, je fais tourner EVA, et j’ai fait les modifs directement sur les squelettes appelés par article.html.

    Voilà... si quelqu’un a une idée...
    Merci !

    • Hello !
      j’ai le même problème, mais pour moi cette petite bidouille ne résoud rien.
      Si quelqu’un peu m’aider,ce serait cool.
      Merci.

    Répondre à ce message

  • 5

    Bonsoir,
    J’ai protégé certaines rubriques de mon site sous SPIP 1.7 avec acces.

    Lorsque je clique sur une rubrique qui devrait etre protégée elle s’affiche sous cette information :

    Warning : session_start() : Cannot send session cookie - headers already sent by (output started at /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/a/con-2-32.8094c9.NEW:5) in /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/a/con-2-32.8094c9.NEW on line 10

    Warning : session_start() : Cannot send session cache limiter - headers already sent (output started at /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/a/con-2-32.8094c9.NEW:5) in /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/a/con-2-32.8094c9.NEW on line 10

    Warning : Cannot modify header information - headers already sent by (output started at /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/a/con-2-32.8094c9.NEW:5) in /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/a/con-2-32.8094c9.NEW on line 34

    Lorsque je clique sur une rubrique non protégée elle s’afiche sous cet autre message.

    Warning : session_start() : Cannot send session cookie - headers already sent by (output started at /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/6/con-2-43.8b55f7.NEW:5) in /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/6/con-2-43.8b55f7.NEW on line 8

    Warning : session_start() : Cannot send session cache limiter - headers already sent (output started at /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/6/con-2-43.8b55f7.NEW:5) in /data/members/free/laposte/fr/a/c/c/site/htdocs/CACHE/6/con-2-43.8b55f7.NEW on line 8

    Que faire ?

    P.C

    • J’obtiens les mêmes méchants messages (sous SPIP 1.7). Le vidage de cache ou de cookie ne sert à rien, ça bloque. Incompatibilité avec la 1.7 ?

    • Comme j’avais également des problèmes avec le header, j’ai utilisé du javascript en ayant soin de modifier la valeur de $origine dans les scripts.

      J’ai remplacé dans controle_acces_article.html :
      $origine=$HTTP_SERVER_VARS[’SCRIPT_NAME’].« ? ».$HTTP_SERVER_VARS[’QUERY_STRING’] ;

      Par :
      $origine=« article.php3 ? ».$HTTP_SERVER_VARS[’QUERY_STRING’] ;

      Et :
      header(« location : FA2.php3 ?origine=$origine ») ;

      Par :

      echo « 

      <script language='Javascript'> &raquo;<small class="fine d-inline"> </small>;
      <p>echo &laquo; window.location.href=&#8217;FA2.php3<small class="fine d-inline"> </small>?origine= &raquo; . $origine .«<small class="fine d-inline"> </small>&#8217;<small class="fine d-inline"> </small>;\n<small class="fine d-inline"> </small>»<small class="fine d-inline"> </small>;</p>
      <p>echo &laquo; &lt; /script> &raquo;<small class="fine d-inline"> </small>;</p>
      <p><i>Attention à la syntaxe<small class="fine d-inline"> </small>!!</i></p>
      <p>Faire idem pour les rubriques (controle_acces_rubrique.html)</p>
      <p>Chez moi ça marche impécable<small class="fine d-inline"> </small>!!<br class='autobr' />
      Merci pour cette contrib</p>
    • Merci pour cette piste. Hélas cela ne fait envoler que le problème lié au header, pas le reste.

    • Salut bah j’ai le meme probleme, mais que les deux premieres erreurs, et la solution n’a pas resolue le bug !

      Si vous vous avez une solution ca m’arrangerait !

    • NicolasR

      Bonjour,
      Voici ce que j’obtiens après avoir appliqué ces corrections :
      Warning : session_start() [function.session-start] : Cannot send session cookie - headers already sent by (output started at /home/www/fr/savoirfaire/reseaux/observatoire-logement-social/CACHE/6/con-5-12.8b8c5e.NEW:5) in /home/www/fr/savoirfaire/reseaux/observatoire-logement-social/CACHE/6/con-5-12.8b8c5e.NEW on line 10

      Warning : session_start() [function.session-start] : Cannot send session cache limiter - headers already sent (output started at /home/www/fr/savoirfaire/reseaux/observatoire-logement-social/CACHE/6/con-5-12.8b8c5e.NEW:5) in /home/www/fr/savoirfaire/reseaux/observatoire-logement-social/CACHE/6/con-5-12.8b8c5e.NEW on line 10
      window.location.href=’FA2.php3 ?origine=article.php3 ?’ ; < /script>

      Avez-vous une auter idée ?
      Merci

    Répondre à ce message

  • Geronimo

    Bonjour.

    Très impatient d’installer cette contrib sur mon nouveau site, je souhaite savoir si la mise a été faite ou non.

    Pardon pour mon impatience.

    Géronimo.

    Répondre à ce message

  • Bisontin

    Comment peut on acceder aux articles ou rubriques par mot de passe à partir d’une base de données adhérents par exemple ou comment creer un espace adhérent dans le quel figurerait les rubriques ou article qu’on souhaite protéger. Merci

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom