OVH Cloud OVH Cloud

Session.SessionID vraiment unique???

30 réponses
Avatar
Norm
Est-ce que quelqu'un sait comment est créer le session.sessionId.

J'ose croire que cette clé est unique, mias là des doutes me hantent.

Voici ce qui se passe de temps à autre, pas tout le temps.
J'ouvre une première fois mon intranet. Je place en session des données
(dataset).

J'en ouvre un deuxieme, et lorsque je vais lire ce qu'il y a en session il
récupère les données de ce qu'il y a dans la session du premier.

Avant j'utilisais sessionstate inproc, mais j'ai changer pour stateserver.
Le problème arrive d'une façon ou l'autre.

Ma première idée qui j'espère est fausse est que dans sa facon de créer de
session.sessionid il peut arriver qu'un id soit répéter.

Quelqu'un pour m'éclairer?

10 réponses

1 2 3
Avatar
Norm
> A priori :
- si la deuxième fenêtre est ouverte à partir de l'instance existante


d'IE,
c'est la même session


Vrai si on l'ouvre avec un ctrl-N par exemple.
Dans notre cas, pour ouvrir "L'intranet" les utilisateurs cliquent sur un
raccourci créer sur leur bureau. Donc, la majorité du temps, les sessions ne
sont pas les mêmes dû au fait qu'ils ouvrent une nouvelle instance d'IE



- si la deuxième fenêtre est ouverte en double cliquant sur l'icône d'IE,


ce
sera une nouvelle instance d'IE et une nouvelle session


C'est bien là le problème, c'est pas toujours le cas.



Difficile à dire sans le contexte exact, mais si les utilisateurs ont


besoin
de se connecter en même temps sous des comptes différents, j'aurais


tendance
à voir si cela ne serait pas à intégrer dans l'application. Dans les
messageries, il est généralement possible de donner des droitds à d'autre
utilisateurs sur une boîte pour qu'ils puissent agir au nom d'un
utilisateur. A priori ils peuvent faire cela sans se
déconnecter/reconnecter.



les utilisateurs utilisent un seul et meme compte.


Merci de votre aide
Avatar
Norm
"Michel Thiffault" a écrit dans le message de
news:
À ce que je sache il est impossible d'être certain qu'une nouvelle fenêtre
sera dans la même session ou non. Avant IE 5.5 il y avait une


configuration
possible à cet effet: lancer les nouvelles fenêtre dans le même "process"
(désolé, je ne me souviens pas de la dernière fois où j'ai utilisé Windows
en français). Nous pouvions ainsi garantir que les sessions étaient
utilisées dans toutes les fenêtres. Depuis IE 5.5 Windows décide si les
fenêtre sont lancées dans le même process ou non (selon les ressources
disponibles si je ne m'abuse).



C'est la conclusion à laquelle j'arrive également.
http://support.microsoft.com/?kbid$0928

Si l'ordinateur dispose de moins de 32 mégaoctets (Mo) de mémoire vive, ce
paramètre est désactivé et toutes les instances d'Internet Explorer
partagent le même processus. Si l'ordinateur présente 32 Mo de RAM ou plus,
le paramètre est activé et les nouvelles instances d'Internet Explorer
génèrent la création de nouveaux processus.


Merci de votre aide.
Je trouve une façon de contourner le problème de session etje vous en fait
part.
Avatar
Patrice
Si ils utilisent un seul et même compte dans deux fenêtres différentes, quel
est le problème posé par le fait que la session est la même dans les deux
fenêtres ?

Je ne vois guère comme problème que d'utiliser un même nom pour deux usages
différents. Par exemple si on met en cache les données toujours sous le même
nom "MesDonnéesEnCache" cela posera problème. Par contre si l'on utilise
"Annuaire" d'une part et "Pays" d'autre part, les deux pages utiliseront
chacune la donnée en cache qui l'intéresse sans se marcher sur les pieds
?????

Patrice

--

"Norm" a écrit dans le message de
news:%



[coupé]

les utilisateurs utilisent un seul et meme compte.



[coupé]
Avatar
Norm
> Si ils utilisent un seul et même compte dans deux fenêtres différentes,


quel
est le problème posé par le fait que la session est la même dans les deux
fenêtres ?


°¿°

Supposons que l'utilisateur veut créer une facture dans la fenetre 1. et
dans la fenetre 2, il veut créer une autre facture.
Les deux fenetres utilisent la meme page .aspx. lorsque je saverais dans la
fenetre 2, les données serait mélangées avec la fenêtre1.
un exemple aprmis tant d'autres qui arrivent plus que fréquemment.

Je ne vois guère comme problème que d'utiliser un même nom pour deux usages
différents. Par exemple si on met en cache les données toujours sous le


même
nom "MesDonnéesEnCache" cela posera problème. Par contre si l'on utilise
"Annuaire" d'une part et "Pays" d'autre part, les deux pages utiliseront
chacune la donnée en cache qui l'intéresse sans se marcher sur les pieds



Et que faites vous du cas que c'est la même page dans les deux applications.
Annuaire dans un et Annuaire dans l'autre dans ce cas.

C'est pourquoi l'option envisagée sera propablement de concaténé une
date(date ouverture de la page) dans le nom des variables sessions. Ainsi,
pour une meme session, chaque aurait ses variables sessions qui lui sont
propres.
Avatar
Patrice
Pour l'exemple des factures je ne vois pas toujours pas trop comment le
mélange peut intervenir :
- les données saisies dans la page 2 sont "postées" vers le serveur lorsque
la page est validée. Les données saisies dans la page 1 ne seront absolument
pas envoyés vers le serveur lors de la validation de la page 2 donc pas de
mélange.

Dans le cas 2, si les deux pages utilisent la même "source", il est au
contraire souhaitable qu'elles utilisent la même liste (le but recherché
étant bien d'extraire la liste une fois pour toute). La liste est bien la
même en toute circonstance (l'exemple d'une liste de pays est peut-être plus
pertinent). Par contre si cette annuaire est utilisé dans un but totalement
différent (avec des filtres etc ???), il faudrait effectivement plusieurs
variables (ou ne pas cacher si cela varie de toute façon).

Si des variables de session sont utilisés transitoirement dans le traitement
des pages, je rejoins avec modération l'avis de Michel. Les variables de
session ne sont pas mauvaises en soi mais peuvent effectivement poser
problème selon la façon dont on les utilise (notamment si elles sont
utilisées pour "cacher" des données en lecture/écriture ou par exemple pour
passer des données d'une page à l'autre). Décrit éventuellement leur usage
si tu souhaites continuer la conversation (par exemple tu en as quand tu
valides une facture ?)

De mon côté, j'en ai une poignée essentiellement utilisées pour mémoriser
les caractéristiques essentielles du "profil" de l'utilisateur en cours.
Sinon j'utilise plutôt le cache pour des données essentiellement en lecture
seule qui sont d'ailleurs partagées par tous les utilisateurs plutôt que
pour un utilisateur particulier sur une certaine période. De mémoire, je
cache rarement voire jamais les données au niveau d'un utilisateur unique.

Patrice

--

"Norm" a écrit dans le message de
news:%
> Si ils utilisent un seul et même compte dans deux fenêtres différentes,
quel
> est le problème posé par le fait que la session est la même dans les


deux
> fenêtres ?
°¿°

Supposons que l'utilisateur veut créer une facture dans la fenetre 1. et
dans la fenetre 2, il veut créer une autre facture.
Les deux fenetres utilisent la meme page .aspx. lorsque je saverais dans


la
fenetre 2, les données serait mélangées avec la fenêtre1.
un exemple aprmis tant d'autres qui arrivent plus que fréquemment.

>Je ne vois guère comme problème que d'utiliser un même nom pour deux


usages
>différents. Par exemple si on met en cache les données toujours sous le
même
>nom "MesDonnéesEnCache" cela posera problème. Par contre si l'on utilise
>"Annuaire" d'une part et "Pays" d'autre part, les deux pages utiliseront
>chacune la donnée en cache qui l'intéresse sans se marcher sur les pieds

Et que faites vous du cas que c'est la même page dans les deux


applications.
Annuaire dans un et Annuaire dans l'autre dans ce cas.

C'est pourquoi l'option envisagée sera propablement de concaténé une
date(date ouverture de la page) dans le nom des variables sessions. Ainsi,
pour une meme session, chaque aurait ses variables sessions qui lui sont
propres.







Avatar
Norm
> Pour l'exemple des factures je ne vois pas toujours pas trop comment le
mélange peut intervenir :
- les données saisies dans la page 2 sont "postées" vers le serveur


lorsque
la page est validée. Les données saisies dans la page 1 ne seront


absolument
pas envoyés vers le serveur lors de la validation de la page 2 donc pas de
mélange.


Les données de la page 1 ne sont pas envoyés effectivement lors de la
validation de la page 2.
Mais lors de cette même validation si je vais chercher des données dans la
session, alors là oui il va chercher les variables sessions de la page 1
lorsque c'est la même session.


Si des variables de session sont utilisés transitoirement dans le


traitement
des pages, je rejoins avec modération l'avis de Michel. Les variables de
session ne sont pas mauvaises en soi mais peuvent effectivement poser
problème selon la façon dont on les utilise (notamment si elles sont
utilisées pour "cacher" des données en lecture/écriture ou par exemple


pour
passer des données d'une page à l'autre). Décrit éventuellement leur usage
si tu souhaites continuer la conversation (par exemple tu en as quand tu
valides une facture ?)


C'est justement ce que je me rends compte que c'est pas viable à cause du
partage de session.


Voyons le pourquoi je garde ça en session.
Supposons que j'ai dix lignes (dans un datagrid) de factures créer pour la
premiere facture, mais qu'elles ne sont pas sauvegardés encore.
Comment faire pour garder ces lignes entre chaque postback.
Ce que je fais c'est de garder un dataset en session et de le réaffecter au
datasource du datagrid au besoin, par exemple apres un edit d'une ligne du
datagrid.

-Solution envisagés : Garder le dataset dans le viewstate. (mauvais car
augmente la grosseur de la page apsx)
Garder en session(mauvais car sessions
partagées, d'où mon post)
Avatar
Norm
La façon "temporaire" (que j'aime pas nécessairement) est de placer la date
dans un champ texte caché dans le page load.

If IsNothing(txtDateSession.Text = "") Then
txtDateSession.Text = Now.ToString
End If

et de concaténer cette date dans le nom des variables session.
ex: session("Test" & txtDateSession.text ) = "Blablabla"

On s'assure bien de n'avoir des variables uniques par navigateur

Si des variables session peuvent etre partagés sans probleme alors pas
nécessaire de concaténé bien entendu.


"Norm" a écrit dans le message de
news:%

"Michel Thiffault" a écrit dans le message de
news:
> À ce que je sache il est impossible d'être certain qu'une nouvelle


fenêtre
> sera dans la même session ou non. Avant IE 5.5 il y avait une
configuration
> possible à cet effet: lancer les nouvelles fenêtre dans le même


"process"
> (désolé, je ne me souviens pas de la dernière fois où j'ai utilisé


Windows
> en français). Nous pouvions ainsi garantir que les sessions étaient
> utilisées dans toutes les fenêtres. Depuis IE 5.5 Windows décide si les
> fenêtre sont lancées dans le même process ou non (selon les ressources
> disponibles si je ne m'abuse).

C'est la conclusion à laquelle j'arrive également.
http://support.microsoft.com/?kbid$0928

Si l'ordinateur dispose de moins de 32 mégaoctets (Mo) de mémoire vive,


ce
paramètre est désactivé et toutes les instances d'Internet Explorer
partagent le même processus. Si l'ordinateur présente 32 Mo de RAM ou


plus,
le paramètre est activé et les nouvelles instances d'Internet Explorer
génèrent la création de nouveaux processus.


Merci de votre aide.
Je trouve une façon de contourner le problème de session etje vous en fait
part.





Avatar
Michel Thiffault
> Si des variables de session sont utilisés transitoirement dans le
traitement des pages, je rejoins avec modération l'avis de Michel.



J'admet avoir un point de vue extrême sur les variables sessions. Disons que
lorsque nos applications ont commencé à être utilisées par quelques milliers
d'utilisateur nous avons dû repasser tous le code pour les remplacer pour
être compatible avec des web farms (pas agréable du tout!).

Pour en revenir au problème de notre collègue Norm il semble que le
viewstate devient de plus en plus intéressant dans son cas.
Avatar
Patrice
Dans ce cas peut-être quelque chose :
- un RegisterHiddenField pour créer un champ caché, ce champ est
System.NewGuid
- la variable de session est crée avec un préfixe et ce System..NewGuid
Chaque page peut donc avoir sa propre variable de session.

Il est aussi possible de voir selon le contexte exact (complexité/temps
passé par l'utilisateur) :
- sauver les données dans une facture "non validée peut-être intéressant
(permet par exemple d'abandonner puis de reprendre ultérieurement)
- certes en abandonnant la datagrid, il serait possible de mener toute la
saisie sur le client (en ajoutant une ligne à chaque saisie dans la ligne de
saisie). La tableau de saisie s'étend et les données sont toutes récupérées
au postback final.

Patrice

--

"Norm" a écrit dans le message de
news:



[coupé]

Voyons le pourquoi je garde ça en session.
Supposons que j'ai dix lignes (dans un datagrid) de factures créer pour la
premiere facture, mais qu'elles ne sont pas sauvegardés encore.
Comment faire pour garder ces lignes entre chaque postback.
Ce que je fais c'est de garder un dataset en session et de le réaffecter


au
datasource du datagrid au besoin, par exemple apres un edit d'une ligne du
datagrid.

-Solution envisagés : Garder le dataset dans le viewstate. (mauvais car
augmente la grosseur de la page apsx)
Garder en session(mauvais car sessions
partagées, d'où mon post)











Avatar
Patrice
De note côté on a accepté en cas de problème que les utilisateurs aient à se
reconnecter.

Le boiter de "load balancing" (Altéon) est capable de diriger une requête
toujours vers le même serveur (plusieurs méthodes sont possible, IP, cookie
etc...).

Nos sites Web ont également moins d'utilisateurs (applications verticales
voire spécifique à un projet).

Patrice

--

"Michel Thiffault" a écrit dans le message de
news:%

> Si des variables de session sont utilisés transitoirement dans le
> traitement des pages, je rejoins avec modération l'avis de Michel.

J'admet avoir un point de vue extrême sur les variables sessions. Disons


que
lorsque nos applications ont commencé à être utilisées par quelques


milliers
d'utilisateur nous avons dû repasser tous le code pour les remplacer pour
être compatible avec des web farms (pas agréable du tout!).

Pour en revenir au problème de notre collègue Norm il semble que le
viewstate devient de plus en plus intéressant dans son cas.




1 2 3