Configuration Apache-PHP pour problème de session

sananas Messages postés 6 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 27 février 2008 - 27 févr. 2008 à 13:11
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 - 27 févr. 2008 à 16:33
Bonjour,

J'ai un problème de session que je n'arrive pas a résoudre!
Nous avons installé un nouveau serveur ZendCore sur notre i5/OS (IBM)... bref, c'est un serveur HTTP fonctionnant avec apache et php...
Je cherche a mettre en place un espace sécurisé sur notre site internet, mais j'ai des problèmes bizarre avec les sessions, je ne sais pas si c'est normal ou pas...

J'ai une page index.php avec formulaire classique "login et mot de passe". S'ils sont ok, une session est crée des variables $_SESSION aussi et je suis redirigé avec <script>window.location...etc vers la page principale de l'espace sécurisé...
A la première connexion, aucun problème tout ce passe bien...
Mais si j'ai le malheur de quitter brutalement mon navigateur ou d'en ouvrir un second sur la page index.php pour ouvrir le même espace sous un autre nom... la nouvelle session n'est pas récupèré et je boucle indéfiniment sur la page index.php...
Je suis obliger d'attendre l'expiration de ma première session ou de la supprimer dans le répertoire des sessions.

Je commence à en avoir raz la casquette de ces sessions... cela fait une semaine que je me prend la tête dessus avec toujours une nouvel surprise... Je ne veux pas passer d'identifiant SID dans l'url, j'ai fini par trouver que c'était un paramatre de php.ini qu'il fallait configurer...
Comment lui faire comprendre qu s'il y a déjà une connexion pour mon poste il faut qu'il l'a détruise ou qu'il l'a réutilise?

Merci pour votre aide....

Mon PHP.INI (par session)

[Session]
; Handler used to store/retrieve data.
session.save_handler = files


; Argument passed to save_handler.  In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
;
; As of PHP 4.0.1, you can define the path as:
;
;     session.save_path = "N;/path"
;
; where N is an integer.  Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories.  This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
;
; NOTE 1: PHP will not create this directory structure automatically.
;         You can use the script in the ext/session dir for that purpose.
; NOTE 2: See the section on garbage collection below if you choose to
;         use subdirectories for session storage
;
; The file storage module creates files using mode 600 by default.
; You can change that by using
;
;     session.save_path = "N;MODE;/path"
;
; where MODE is the octal representation of the mode. Note that this
; does not overwrite the process's umask.
session.save_path = "/www/zendcore/sessions"


; Whether to use cookies.
session.use_cookies = 1


; This option enables administrators to make their users invulnerable to
; attacks which involve passing session ids in URLs; defaults to 0.
; session.use_only_cookies = 1


; Name of the session (used as cookie name).
session.name = PHPSESSID


; Initialize session on request startup.
session.auto_start = 0


; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0


; The path for which the cookie is valid.
session.cookie_path = /


; The domain for which the cookie is valid.
session.cookie_domain =


; Handler used to serialize data.  php is the standard serializer of PHP.
session.serialize_handler = php


; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.


session.gc_probability = 1
session.gc_divisor     = 1000


; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440


; NOTE: If you are using the subdirectory option for storing session files
;       (see session.save_path above), then garbage collection does *not*
;       happen automatically.  You will need to do your own garbage
;       collection through a shell script, cron entry, or some other method.
;       For example, the following script would is the equivalent of
;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
;          cd /path/to/sessions; find -cmin +24 | xargs rm


; PHP 4.2 and less have an undocumented feature/bug that allows you to
; to initialize a session variable in the global scope, albeit register_globals
; is disabled.  PHP 4.3 and later will warn you, if this feature is used.
; You can disable the feature and the warning seperately. At this time,
; the warning is only displayed, if bug_compat_42 is enabled.


session.bug_compat_42 = 0
session.bug_compat_warn = 1


; Check HTTP Referer to invalidate externally stored URLs containing ids.
; HTTP_REFERER has to contain this substring for the session to be
; considered as valid.
session.referer_check =


; How many bytes to read from the file.
session.entropy_length = 0


; Specified here to create the session id.session.entropy_file ;session.entropy_length 16


;session.entropy_file = /dev/urandom


; Set to {nocache,private,public,} to determine HTTP caching aspects
; or leave this empty to avoid sending anti-caching headers.
session.cache_limiter = nocache


; Document expires after n minutes.
session.cache_expire = 180


; trans sid support is disabled by default.
; Use of trans sid may risk your users security.
; Use this option with caution.
; - User may send URL contains active session ID
;   to other person via. email/irc/etc.
; - URL that contains active session ID may be stored
;   in publically accessible computer.
; - User may access your site with the same session ID
;   always using URL stored in browser's history or bookmarks.
session.use_trans_sid = 1


; Select a hash function
; 0: MD5   (128 bits)
; 1: SHA-1 (160 bits)
session.hash_function = 0


; Define how many bits are stored in each character when converting
; the binary hash data to something readable.
;
; 4 bits: 0-9, a-f
; 5 bits: 0-9, a-v
; 6 bits: 0-9, a-z, A-Z, "-", ","
session.hash_bits_per_character = 5


; The URL rewriter will look for URLs in a defined set of HTML tags.
; form/fieldset are special; if you include them here, the rewriter will
; add a hidden field with the info which is otherwise appended
; to URLs.  If you want XHTML conformity, remove the form entry.
; Note that all valid entries require a "=", even if no value follows.
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

5 réponses

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
27 févr. 2008 à 14:08
Salut,

session_start();

if(isset($_SESSION['la variable que t'avais créée'])){
    page s'affiche
}
else {
    redirection sur page de login
}

ça devrait faire l'affaire je pense ?
0
sananas Messages postés 6 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 27 février 2008
27 févr. 2008 à 15:20
Justement non!

Désolée de ne l'avoir précisé...
Mais quand je dissais "une session est créée... " et "A la première connexion, aucun problème tout ce passe bien..."
C'est que j'ai déjà ce code dans mes pages... sinon je ne pourrais pas accèder à mon espace la première fois...

Le problème est autre, quand je ferme mon navigateur et que j'en ouvre un autre pour me reconnecter...
session_start() ne trouve pas mon ancienne version, du coup il me recréée une nouvelle session...
Jusque là ça pourrait ne pas être trop grave, mais cette nouvelle session n'est pas concervée quand je suis redirigé vers ma page d'accueil de mon espace membre... il en recrée une 2ème qui n'a pas les varibales de session en mémoire...

Pour faire plus simple :

1er CAS, fermeture brutal du navigateur
_ Ouverture du navigateur
_ J'accède à mon index.php
_ Identification (envoit du formulaire de connexion)
_ Mot de passe correct -> Création d'une session + ajout de variable de session
_ Redirection vers accueil.php
_ Verification d'une session existante (session_start();) + existance des varibales de Session
_ Tout est ok -> affichage de la page accueil.php

_ Je ferme le navigateur avec la croix...
_ J'ouvre un nouveau navigateur (le même, ici IE)
_ J'accède à mon index.php  
_ Identification (envoit du formulaire de connexion)
_ Mot de passe correct -> Création d'une session + ajout de variable de session
_ Redirection vers accueil.php
_ Verification d'une session existante (C'est là où est le problème... session_start(); ne trouve pas de session donc en recrée une)
 _ Verification des variabes de Session, pas de variables --> retour à la page de connexion index.php

2ème CAS, simple ouverture d'un second navigateur(résultat identique)
_ Ouverture du navigateur
_ J'accède à mon index.php
_ Identification (envoit du formulaire de connexion)
_ Mot de passe correct -> Création d'une session + ajout de variable de session
_ Redirection vers accueil.php
_ Verification d'une session existante (session_start();) + existance des varibales de Session
_ Tout est ok -> affichage de la page accueil.php

_ J'ouvre un nouveau navigateur (le même, ici IE)
_ J'accède à mon index.php  
_ Identification (envoit du formulaire de connexion)
_ Mot de passe correct -> Création d'une session + ajout de variable de session
_ Redirection vers accueil.php
_ Verification d'une session existante (C'est là où est le problème... session_start(); ne trouve pas de session donc en recrée une)
 _ Verification des variabes de Session, pas de variables --> retour à la page de connexion index.php

Voilà, c'est peut-être plus clair comme ça...
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
27 févr. 2008 à 15:30
Mmm... tu n'utiliserais pas un système de cookies en même temps, non ?
réessaie d'ouvrir une session, de fermer, de réouvrir, d'effacer les cookies, d'ouvrir une session. ça marche ?
à+
0
sananas Messages postés 6 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 27 février 2008
27 févr. 2008 à 16:21
J'ai testé mais ça ne change rien...

J'ai ajouté session.lifetime=0 dans le PHP.ini pour être sur que la session soit inutilisable après fermeture du navigateur...
Elle n'existait pas dans le fichier... Je sais pas si ça peut jouer...

Je crois que j'ai trouvé, ton histoire de cookie m'a mis la puce à l'oreille, j'ai modifié ma ligne de création de cookie
setcookie('nom_du_cookie',session_id()); 
remplacé par 
setcookie(session_name(),session_id());

J'ai également fait le même genre de modification sur les autres pages faisant appel au cookie...
Ca a l'air de ne plus le faire...

Merci...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
27 févr. 2008 à 16:33
Oui je me doutais que ça venait des cookies... mais tu sais tu n'as pas besoin de mettre l'id de session dans un cookie. Tu créés juste une variable $-SESSION['connecté?'] qui vaut 0 ou 1. Si c'est 1, tu donnes accès, et c'est tout, tu n'utilises pas l'identifiant de session... par ailleurs, si tu voulais absolument utiliser un cookie, tu n'aurais qu'à activer l'option use_session_cookies_only (ou un truc comme ça) dans le php.ini et ce serait automatique.

Si la réponse te convient, merci d'accepter la réponse pour clore le sujet.
à+
0
Rejoignez-nous