OVH Cloud OVH Cloud

Portée des déclaration de variables

9 réponses
Avatar
Pascal
Bonjour à tous

J'ai eu la désagreable experience de voir que la declaration des variables
'public' dans un module de classes avait une portée non pas uniquement sur
la session mais aussi pour tous les utilisateurs...avec des valeurs qui
changent alègrement suivant les utilisateurs connectés...

Quelle est la solution ?

Merci d'avance

Pascal

9 réponses

Avatar
PLoubat
Bonjour,

S'agit-il d'une variable static ?

Pascal

"Pascal" a écrit :

Bonjour à tous

J'ai eu la désagreable experience de voir que la declaration des variables
'public' dans un module de classes avait une portée non pas uniquement sur
la session mais aussi pour tous les utilisateurs...avec des valeurs qui
changent alègrement suivant les utilisateurs connectés...

Quelle est la solution ?

Merci d'avance

Pascal





Avatar
Patrice
Utiliser par exemple des variables de session.

Les variables publiques d'un module sont en fait les variables "shared"
d'une classe. Elles ont donc la même valeur pour toute l'application ASP.NET
(donc tous les utilisateurs).

--

"Pascal" a écrit dans le message de
news:42b6931e$0$9069$
Bonjour à tous

J'ai eu la désagreable experience de voir que la declaration des variables
'public' dans un module de classes avait une portée non pas uniquement sur
la session mais aussi pour tous les utilisateurs...avec des valeurs qui
changent alègrement suivant les utilisateurs connectés...

Quelle est la solution ?

Merci d'avance

Pascal




Avatar
Pascal
OK merci

Juste pour confirmer :
Session("Mavariable") = "Test"

C'est donc toujour une chaine de caractère ?

"Patrice" a écrit dans le message de
news:
Utiliser par exemple des variables de session.

Les variables publiques d'un module sont en fait les variables "shared"
d'une classe. Elles ont donc la même valeur pour toute l'application


ASP.NET
(donc tous les utilisateurs).

--

"Pascal" a écrit dans le message de
news:42b6931e$0$9069$
> Bonjour à tous
>
> J'ai eu la désagreable experience de voir que la declaration des


variables
> 'public' dans un module de classes avait une portée non pas uniquement


sur
> la session mais aussi pour tous les utilisateurs...avec des valeurs qui
> changent alègrement suivant les utilisateurs connectés...
>
> Quelle est la solution ?
>
> Merci d'avance
>
> Pascal
>
>




Avatar
Patrice
Tu peux stocker ce que tu veux dedans.

Tu peux même passer par une classe interméidaire ce qui permet d'avoir
intellisense et contrôle de type :

Class ThisUser
Property Shared MaVariable As String
Get
...
End Get
Set
...
End Set
End Property

Property Shared HitCount As Integer
Get
....
End Get
Set
...
End Set
End Property
End Class

Les propriétés sont shared mais comme la valeur sous-jacente est stockée
dans une variable de session cela ne pose pas de problèmes...

Patrice

--

"Pascal" a écrit dans le message de
news:42b6c8ae$0$14667$
OK merci

Juste pour confirmer :
Session("Mavariable") = "Test"

C'est donc toujour une chaine de caractère ?

"Patrice" a écrit dans le message de
news:
> Utiliser par exemple des variables de session.
>
> Les variables publiques d'un module sont en fait les variables "shared"
> d'une classe. Elles ont donc la même valeur pour toute l'application
ASP.NET
> (donc tous les utilisateurs).
>
> --
>
> "Pascal" a écrit dans le message de
> news:42b6931e$0$9069$
> > Bonjour à tous
> >
> > J'ai eu la désagreable experience de voir que la declaration des
variables
> > 'public' dans un module de classes avait une portée non pas uniquement
sur
> > la session mais aussi pour tous les utilisateurs...avec des valeurs


qui
> > changent alègrement suivant les utilisateurs connectés...
> >
> > Quelle est la solution ?
> >
> > Merci d'avance
> >
> > Pascal
> >
> >
>
>




Avatar
Pascal
Merci bien pour ces infos, j'y vois plus clair !

Pascal


"Patrice" a écrit dans le message de
news:
Tu peux stocker ce que tu veux dedans.

Tu peux même passer par une classe interméidaire ce qui permet d'avoir
intellisense et contrôle de type :

Class ThisUser
Property Shared MaVariable As String
Get
...
End Get
Set
...
End Set
End Property

Property Shared HitCount As Integer
Get
....
End Get
Set
...
End Set
End Property
End Class

Les propriétés sont shared mais comme la valeur sous-jacente est stockée
dans une variable de session cela ne pose pas de problèmes...

Patrice

--

"Pascal" a écrit dans le message de
news:42b6c8ae$0$14667$
> OK merci
>
> Juste pour confirmer :
> Session("Mavariable") = "Test"
>
> C'est donc toujour une chaine de caractère ?
>
> "Patrice" a écrit dans le message de
> news:
> > Utiliser par exemple des variables de session.
> >
> > Les variables publiques d'un module sont en fait les variables


"shared"
> > d'une classe. Elles ont donc la même valeur pour toute l'application
> ASP.NET
> > (donc tous les utilisateurs).
> >
> > --
> >
> > "Pascal" a écrit dans le message de
> > news:42b6931e$0$9069$
> > > Bonjour à tous
> > >
> > > J'ai eu la désagreable experience de voir que la declaration des
> variables
> > > 'public' dans un module de classes avait une portée non pas


uniquement
> sur
> > > la session mais aussi pour tous les utilisateurs...avec des valeurs
qui
> > > changent alègrement suivant les utilisateurs connectés...
> > >
> > > Quelle est la solution ?
> > >
> > > Merci d'avance
> > >
> > > Pascal
> > >
> > >
> >
> >
>
>




Avatar
PLoubat
Bonjour,

S'agissait-il bien d'une variable public static ?
Car j'imagine qu'avec une variable public (classique) il n'y a pas de pb, on
est bien thread-safe ?

Merci d'avance pour la réponse car maintenant j'ai un doute !

Pascal


"Patrice" a écrit :

Utiliser par exemple des variables de session.

Les variables publiques d'un module sont en fait les variables "shared"
d'une classe. Elles ont donc la même valeur pour toute l'application ASP.NET
(donc tous les utilisateurs).

--

"Pascal" a écrit dans le message de
news:42b6931e$0$9069$
> Bonjour à tous
>
> J'ai eu la désagreable experience de voir que la declaration des variables
> 'public' dans un module de classes avait une portée non pas uniquement sur
> la session mais aussi pour tous les utilisateurs...avec des valeurs qui
> changent alègrement suivant les utilisateurs connectés...
>
> Quelle est la solution ?
>
> Merci d'avance
>
> Pascal
>
>





Avatar
Patrice
Oui c'est ça. A ma connaissance un "module" VB.NET est en fait une classe
avec des variables publiques "shared" (VB.NET) ou "static" (C#).

Le problème est que ces variables sont donc globales à toute l'application.
Dans le cas d'une application ASP.NET elles sont donc partagées par tous les
utilisateurs...
--


Patrice


"PLoubat" a écrit dans le message de
news:
Bonjour,

S'agissait-il bien d'une variable public static ?
Car j'imagine qu'avec une variable public (classique) il n'y a pas de pb,


on
est bien thread-safe ?

Merci d'avance pour la réponse car maintenant j'ai un doute !

Pascal


"Patrice" a écrit :

> Utiliser par exemple des variables de session.
>
> Les variables publiques d'un module sont en fait les variables "shared"
> d'une classe. Elles ont donc la même valeur pour toute l'application


ASP.NET
> (donc tous les utilisateurs).
>
> --
>
> "Pascal" a écrit dans le message de
> news:42b6931e$0$9069$
> > Bonjour à tous
> >
> > J'ai eu la désagreable experience de voir que la declaration des


variables
> > 'public' dans un module de classes avait une portée non pas uniquement


sur
> > la session mais aussi pour tous les utilisateurs...avec des valeurs


qui
> > changent alègrement suivant les utilisateurs connectés...
> >
> > Quelle est la solution ?
> >
> > Merci d'avance
> >
> > Pascal
> >
> >
>
>
>


Avatar
PLoubat
Merci pour cette confirmation.
Pascal

"Patrice" a écrit :

Oui c'est ça. A ma connaissance un "module" VB.NET est en fait une classe
avec des variables publiques "shared" (VB.NET) ou "static" (C#).

Le problème est que ces variables sont donc globales à toute l'application.
Dans le cas d'une application ASP.NET elles sont donc partagées par tous les
utilisateurs...
--


Patrice


"PLoubat" a écrit dans le message de
news:
> Bonjour,
>
> S'agissait-il bien d'une variable public static ?
> Car j'imagine qu'avec une variable public (classique) il n'y a pas de pb,
on
> est bien thread-safe ?
>
> Merci d'avance pour la réponse car maintenant j'ai un doute !
>
> Pascal
>
>
> "Patrice" a écrit :
>
> > Utiliser par exemple des variables de session.
> >
> > Les variables publiques d'un module sont en fait les variables "shared"
> > d'une classe. Elles ont donc la même valeur pour toute l'application
ASP.NET
> > (donc tous les utilisateurs).
> >
> > --
> >
> > "Pascal" a écrit dans le message de
> > news:42b6931e$0$9069$
> > > Bonjour à tous
> > >
> > > J'ai eu la désagreable experience de voir que la declaration des
variables
> > > 'public' dans un module de classes avait une portée non pas uniquement
sur
> > > la session mais aussi pour tous les utilisateurs...avec des valeurs
qui
> > > changent alègrement suivant les utilisateurs connectés...
> > >
> > > Quelle est la solution ?
> > >
> > > Merci d'avance
> > >
> > > Pascal
> > >
> > >
> >
> >
> >





Avatar
Zazar
Bonjour,

> Car j'imagine qu'avec une variable public (classique) il n'y a pas de
pb, on
> est bien thread-safe ?

Attention, votre problème n'a rien à voir avec le fait que votr e
variable soit thread-safe ou non. Une variable thread-safe, c'est
grosso-modo une variable à laquelle plusieurs threads peuvent accà ¨der
sans qu'il n'y ait d'interfèrence. Vous votre problèmatique, c' est que
vous ne voulez pas que votre variable soit partagée entre les
différentes sessions. Un objet placé dans la Session y rép ond mais les
différents membres public de cet objet ne sont pas pour autant threa d-safe.

--
Zazar