By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,919 Members | 1,690 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,919 IT Pros & Developers. It's quick & easy.

Session vars vs. HttpContext.Current.User

P: n/a
Currently, I am storing information about the currently logged on user
in Session variables that are stored in SQL. However, I am using
role-based security, so I am storing custom roles in a GenericPrincipal
object that I attached to Context.User. My question is this:

Can I create a new class, ExtendedPrincipal for instance, and simply
inherit System.Security.Principal and store all of the information
currently stored in Session variables in this new object? Is this
responsible/efficient/appropriate?

Thanks in advance!
Jason

Nov 19 '05 #1
Share this Question
Share on Google+
15 Replies


P: n/a
Since the Session is specific to the User, there is no need to add this
level of complexity.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.

"Jason" <ja*************@hotmail.com> wrote in message
news:11*********************@l41g2000cwc.googlegro ups.com...
Currently, I am storing information about the currently logged on user
in Session variables that are stored in SQL. However, I am using
role-based security, so I am storing custom roles in a GenericPrincipal
object that I attached to Context.User. My question is this:

Can I create a new class, ExtendedPrincipal for instance, and simply
inherit System.Security.Principal and store all of the information
currently stored in Session variables in this new object? Is this
responsible/efficient/appropriate?

Thanks in advance!
Jason

Nov 19 '05 #2

P: n/a
Thanks. I was under the impression that using session variables was
yesterdays technology and that this information was handled better by a
new .NET way. This is good though. Now I don't have to go back and
make alot of changes.

Nov 19 '05 #3

P: n/a
Something you could do though would be to create a class with shared numbers
that exposes these session variables as properties.
This way you'll get strong typing and intellisense on those values plus you
don't need to change at once as under the hood there are still stored as
session variables.

Patrice

--

"Jason" <ja*************@hotmail.com> a écrit dans le message de
news:11*********************@o13g2000cwo.googlegro ups.com...
Thanks. I was under the impression that using session variables was
yesterdays technology and that this information was handled better by a
new .NET way. This is good though. Now I don't have to go back and
make alot of changes.

Nov 19 '05 #4

P: n/a
Never thought about that! But I am unfamiliar with "shared numbers" or
how to get a list of "choices" to be displayed when you are trying to
set a property of a class.

Nov 19 '05 #5

P: n/a
What language are you using ? The keyword is Shared in VB.NET and static in
C#.
It allows to have a member that is the same for all objects of a class.
Under the hood it uses the user session to store the value.

Having a list is done using an Enumeration (Enum in both languages if I
remember)...

Actually I didn't thought about that either. Saw this suggestion once in
this group...

Patrice

--

"Jason" <ja*************@hotmail.com> a écrit dans le message de
news:11*********************@l41g2000cwc.googlegro ups.com...
Never thought about that! But I am unfamiliar with "shared numbers" or
how to get a list of "choices" to be displayed when you are trying to
set a property of a class.

Nov 19 '05 #6

P: n/a
> Under the hood it uses the user session to store the value.

Static objects are stored in the application heap, not Session.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.

"Patrice" <no****@nowhere.com> wrote in message
news:ej**************@TK2MSFTNGP10.phx.gbl...
What language are you using ? The keyword is Shared in VB.NET and static
in
C#.
It allows to have a member that is the same for all objects of a class.
Under the hood it uses the user session to store the value.

Having a list is done using an Enumeration (Enum in both languages if I
remember)...

Actually I didn't thought about that either. Saw this suggestion once in
this group...

Patrice

--

"Jason" <ja*************@hotmail.com> a écrit dans le message de
news:11*********************@l41g2000cwc.googlegro ups.com...
Never thought about that! But I am unfamiliar with "shared numbers" or
how to get a list of "choices" to be displayed when you are trying to
set a property of a class.


Nov 19 '05 #7

P: n/a
"Patrice" <no****@nowhere.com> wrote in message
news:u7**************@TK2MSFTNGP10.phx.gbl...
don't need to change at once as under the hood there are still stored as
session variables.


No they aren't! They're stored as application variables.
Nov 19 '05 #8

P: n/a
> No they aren't! They're stored as application variables.

Afraid not. Static objects are stored in the application heap. Always have
been. Always will be. That is, after all, the definition of "static."

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.

"Mark Rae" <ma**@mark-N-O-S-P-A-M-rae.co.uk> wrote in message
news:uB**************@TK2MSFTNGP14.phx.gbl...
"Patrice" <no****@nowhere.com> wrote in message
news:u7**************@TK2MSFTNGP10.phx.gbl...
don't need to change at once as under the hood there are still stored as
session variables.


No they aren't! They're stored as application variables.

Nov 19 '05 #9

P: n/a
Kevin ...
Technically, you are correct ... if these static members are merely
accessors for private variables. For example:
Public Class MySessionVars
Private Shared _myInt As Integer
Public Shared Property MyInt() As Integer
Get
Return _myInt
End Get
Set(ByVal Value As Integer)
_myInt = Value
End Set
End Property
End ClassThis would store the variables in the heap *and* have the same
values for every user! Not desirable in this situation.
Doing this, however, would be different:
Public Class MySessionVars
Public Shared Property MyInt() As Integer
Get
Return CInt(HttpContext.Current.Session("MyInt"))
End Get
Set(ByVal Value As Integer)
HttpContext.Current.Session("MyInt") = Value
End Set
End Property
End Class
In this case, the static property is merely a wrapper around the current
HttpContext's Session object. Note that this will *crash and burn* if not in
an ASP.NET environment! It is the second method that I think Patrice was
referring to ... and I would agree with Patrice on this practice. It's a
nice layer to abstract the details of the Session, providing flexibility on
storage location of the information, providing intellisense and strong
typing. Many Good Things(tm).
Jason ... you'd add the above class (or something like it) to your project
as a class file in the web solution. From there, you would refer to it like
so:
Dim myInt as Integer = MySessionVars.MyInt

You do not have to create an instance of the class to access static/Shared
members of the type.
"Kevin Spencer" wrote:
Under the hood it uses the user session to store the value.


Static objects are stored in the application heap, not Session.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.

"Patrice" <no****@nowhere.com> wrote in message
news:ej**************@TK2MSFTNGP10.phx.gbl...
What language are you using ? The keyword is Shared in VB.NET and static
in
C#.
It allows to have a member that is the same for all objects of a class.
Under the hood it uses the user session to store the value.

Having a list is done using an Enumeration (Enum in both languages if I
remember)...

Actually I didn't thought about that either. Saw this suggestion once in
this group...

Patrice

--

"Jason" <ja*************@hotmail.com> a écrit dans le message de
news:11*********************@l41g2000cwc.googlegro ups.com...
Never thought about that! But I am unfamiliar with "shared numbers" or
how to get a list of "choices" to be displayed when you are trying to
set a property of a class.



Nov 19 '05 #10

P: n/a
Thanks to everyone for your input. My project is in C#, but the above
code is easily translatable. Once of these days, when I have nothing
better to do, I'm going to write a VB.NET -> C# -> VB.NET translator.
Then I'll be rich (provided someone else hasn't already done it).

Nov 19 '05 #11

P: n/a
"Kevin Spencer" <ke***@DIESPAMMERSDIEtakempis.com> wrote in message
news:u0**************@TK2MSFTNGP09.phx.gbl...
No they aren't! They're stored as application variables.


Afraid not. Static objects are stored in the application heap. Always have
been. Always will be. That is, after all, the definition of "static."


Isn't that what I said?
Nov 19 '05 #12

P: n/a
Around here, static is what you get when
people post unresearched "answers" to questions.

No signal. Just noisy static.

;-)

Juan T. Llibre
ASP.NET MVP
http://asp.net.do/foros/
Foros de ASP.NET en Español
=====================

"Kevin Spencer" <ke***@DIESPAMMERSDIEtakempis.com> wrote in message
news:u0**************@TK2MSFTNGP09.phx.gbl...
No they aren't! They're stored as application variables.


Afraid not. Static objects are stored in the application heap. Always have
been. Always will be. That is, after all, the definition of "static."

--
HTH,

Kevin Spencer
Microsoft MVP
.Net Developer
Neither a follower nor a lender be.

"Mark Rae" <ma**@mark-N-O-S-P-A-M-rae.co.uk> wrote in message
news:uB**************@TK2MSFTNGP14.phx.gbl...
"Patrice" <no****@nowhere.com> wrote in message
news:u7**************@TK2MSFTNGP10.phx.gbl...
don't need to change at once as under the hood there are still stored as
session variables.


No they aren't! They're stored as application variables.


Nov 19 '05 #13

P: n/a
Hi J,

Technically I AM correct. A Property is a wrapper for 2 (up to) methods (get
and set). If the Property is static, the methods are static, and stored in
the heap. A static method can work with Session and Application via the
HttpContext. However, the variables that it works with are NOT static.
Therefore, a static property is NOT stored in Session or Application, but in
the heap.

I wasn't disagreeing with Patrice's advice, simply pointing out a technical
error in her explanation of it.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.

"J Sawyer [Microsoft]" <JS**************@discussions.microsoft.com> wrote in
message news:3B**********************************@microsof t.com...
Kevin ...
Technically, you are correct ... if these static members are merely
accessors for private variables. For example:
Public Class MySessionVars
Private Shared _myInt As Integer
Public Shared Property MyInt() As Integer
Get
Return _myInt
End Get
Set(ByVal Value As Integer)
_myInt = Value
End Set
End Property
End ClassThis would store the variables in the heap *and* have the same
values for every user! Not desirable in this situation.
Doing this, however, would be different:
Public Class MySessionVars
Public Shared Property MyInt() As Integer
Get
Return CInt(HttpContext.Current.Session("MyInt"))
End Get
Set(ByVal Value As Integer)
HttpContext.Current.Session("MyInt") = Value
End Set
End Property
End Class
In this case, the static property is merely a wrapper around the current
HttpContext's Session object. Note that this will *crash and burn* if not
in
an ASP.NET environment! It is the second method that I think Patrice was
referring to ... and I would agree with Patrice on this practice. It's a
nice layer to abstract the details of the Session, providing flexibility
on
storage location of the information, providing intellisense and strong
typing. Many Good Things(tm).
Jason ... you'd add the above class (or something like it) to your project
as a class file in the web solution. From there, you would refer to it
like
so:
Dim myInt as Integer = MySessionVars.MyInt

You do not have to create an instance of the class to access static/Shared
members of the type.
"Kevin Spencer" wrote:
> Under the hood it uses the user session to store the value.


Static objects are stored in the application heap, not Session.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.

"Patrice" <no****@nowhere.com> wrote in message
news:ej**************@TK2MSFTNGP10.phx.gbl...
> What language are you using ? The keyword is Shared in VB.NET and
> static
> in
> C#.
> It allows to have a member that is the same for all objects of a class.
> Under the hood it uses the user session to store the value.
>
> Having a list is done using an Enumeration (Enum in both languages if I
> remember)...
>
> Actually I didn't thought about that either. Saw this suggestion once
> in
> this group...
>
> Patrice
>
>
>
> --
>
> "Jason" <ja*************@hotmail.com> a écrit dans le message de
> news:11*********************@l41g2000cwc.googlegro ups.com...
>> Never thought about that! But I am unfamiliar with "shared numbers"
>> or
>> how to get a list of "choices" to be displayed when you are trying to
>> set a property of a class.
>>
>
>


Nov 19 '05 #14

P: n/a
> Isn't that what I said?

No. It is not. Application variables are stored in an instantiated
Collection object in Application memory. Static objects are stored in the
heap. You do know what the heap is, don't you?

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.

"Mark Rae" <ma**@mark-N-O-S-P-A-M-rae.co.uk> wrote in message
news:ep*************@TK2MSFTNGP15.phx.gbl...
"Kevin Spencer" <ke***@DIESPAMMERSDIEtakempis.com> wrote in message
news:u0**************@TK2MSFTNGP09.phx.gbl...
No they aren't! They're stored as application variables.


Afraid not. Static objects are stored in the application heap. Always
have been. Always will be. That is, after all, the definition of
"static."


Isn't that what I said?

Nov 19 '05 #15

P: n/a
You are both right !!

The "it" wasn't referring to static members in general but to the session
wrapper class that uses static properties and that stores under the hood the
value in the user session object as described by J Sawyer but I agree that I
was far from being clear...

Terminology is really sometimes difficult Kevin, properties are never
stored, they are just code that eventually stores something where you want
(not necessarily on the heap) ;-)

Patrice

--

"Kevin Spencer" <ke***@DIESPAMMERSDIEtakempis.com> a écrit dans le message
de news:uY**************@TK2MSFTNGP14.phx.gbl...
Hi J,

Technically I AM correct. A Property is a wrapper for 2 (up to) methods (get and set). If the Property is static, the methods are static, and stored in
the heap. A static method can work with Session and Application via the
HttpContext. However, the variables that it works with are NOT static.
Therefore, a static property is NOT stored in Session or Application, but in the heap.

I wasn't disagreeing with Patrice's advice, simply pointing out a technical error in her explanation of it.

--
HTH,

Kevin Spencer
Microsoft MVP
.Net Developer
Neither a follower nor a lender be.

"J Sawyer [Microsoft]" <JS**************@discussions.microsoft.com> wrote in message news:3B**********************************@microsof t.com...
Kevin ...
Technically, you are correct ... if these static members are merely
accessors for private variables. For example:
Public Class MySessionVars
Private Shared _myInt As Integer
Public Shared Property MyInt() As Integer
Get
Return _myInt
End Get
Set(ByVal Value As Integer)
_myInt = Value
End Set
End Property
End ClassThis would store the variables in the heap *and* have the same
values for every user! Not desirable in this situation.
Doing this, however, would be different:
Public Class MySessionVars
Public Shared Property MyInt() As Integer
Get
Return CInt(HttpContext.Current.Session("MyInt"))
End Get
Set(ByVal Value As Integer)
HttpContext.Current.Session("MyInt") = Value
End Set
End Property
End Class
In this case, the static property is merely a wrapper around the current
HttpContext's Session object. Note that this will *crash and burn* if not in
an ASP.NET environment! It is the second method that I think Patrice was referring to ... and I would agree with Patrice on this practice. It's a nice layer to abstract the details of the Session, providing flexibility
on
storage location of the information, providing intellisense and strong
typing. Many Good Things(tm).
Jason ... you'd add the above class (or something like it) to your project as a class file in the web solution. From there, you would refer to it
like
so:
Dim myInt as Integer = MySessionVars.MyInt

You do not have to create an instance of the class to access static/Shared members of the type.
"Kevin Spencer" wrote:
> Under the hood it uses the user session to store the value.

Static objects are stored in the application heap, not Session.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.

"Patrice" <no****@nowhere.com> wrote in message
news:ej**************@TK2MSFTNGP10.phx.gbl...
> What language are you using ? The keyword is Shared in VB.NET and
> static
> in
> C#.
> It allows to have a member that is the same for all objects of a class. > Under the hood it uses the user session to store the value.
>
> Having a list is done using an Enumeration (Enum in both languages if I > remember)...
>
> Actually I didn't thought about that either. Saw this suggestion once
> in
> this group...
>
> Patrice
>
>
>
> --
>
> "Jason" <ja*************@hotmail.com> a écrit dans le message de
> news:11*********************@l41g2000cwc.googlegro ups.com...
>> Never thought about that! But I am unfamiliar with "shared numbers"
>> or
>> how to get a list of "choices" to be displayed when you are trying to >> set a property of a class.
>>
>
>


Nov 19 '05 #16

This discussion thread is closed

Replies have been disabled for this discussion.