[ASP] Global.asa Session Object

Pagina: 1
Acties:

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Ik wil graag mijn eigen object (Class) in een Session object stoppen, en die dan op elke pagina gebruiken. Zo hoeft deze object namelijk niet elke keer aangemaakt te worden wanneer de gebruiker binnen een tijdsbestek daar browset. Ik heb daarvoor het volgende code in Global.asa:
code:
1
2
3
4
5
Sub Session_OnStart()
    Set session("Cur_User") = new SQLUser
    session("Cur_User").execGetRoles()              ' get all the roles this user is in
    session("Cur_User").execGetPermissions()    ' get all the objects of all the roles the user has 
End Sub


Nu wil ik graag in mijn pagina daar gebruik van maken:
code:
1
2
3
4
5
session("Cur_User").execGetRoles()
-of-
Dim A
Set A = session("Cur_User")
A.execGetRoles()

De functie die ik hier 2 keer gebruik, maakt niks, uit, het is alleen om maar te laten zien dat die wel bestaat :). Ik krijg error:
Object doesn't support this property or method: 'execGetRoles'
/webdev/main.asp, line 20
Hoe krijg ik het nou voor elkaar dat ik gewoon die functies/subs/properties kan gebruiken van SQLUser aangemaakt in Global.asa? Als ik gewoon in de pagina zelf Set A = new SQLUser doe, dan werkt alles gewoon goed. SQLUser is een klasse en wordt met behulp van <!-- #include File="sqluser.asp" --> gebruikt in Global.asa. In de normale pagina wordt dit dan ook niet geinclude. De functies werken wel als ze aangeroepen worden in Global.asa, maar dat is natuurlijk niet genoeg :(

[ Voor 14% gewijzigd door Darkvater op 02-06-2004 16:01 ]


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
kan niet. Eigen Classes kun je niet in de Session scope stoppen.

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
zneek schreef op 02 juni 2004 @ 16:02:
kan niet. Eigen Classes kun je niet in de Session scope stoppen.
Grrrrrrr. Dank je wel ASP :r
Tja, het zou vast wel werken met Server.CreateObject als ik nou mijn classe in een COM(+) object zou kunnen stoppen en die dan aanroepen. Maar dat wordt weer niet toegestaan op de server :|

Even een vraagje: kan het ook niet in de Application scope? (niet dat ik daar veel aan heb trouwens). Dan moet ik maar teruggaan naar per pagina-scope :'(


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:23

gorgi_19

Kruimeltjes zijn weer op :9

En wat achtergrond info
http://www.aspfaqs.com/ASPscripts/PrintFAQ.asp?FAQID=195

zal dus ook gelden voor Application variables :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Darkvater schreef op 02 juni 2004 @ 17:36:
[...]


Grrrrrrr. Dank je wel ASP :r
Tja, het zou vast wel werken met Server.CreateObject als ik nou mijn classe in een COM(+) object zou kunnen stoppen en die dan aanroepen. Maar dat wordt weer niet toegestaan op de server :|

Even een vraagje: kan het ook niet in de Application scope? (niet dat ik daar veel aan heb trouwens). Dan moet ik maar teruggaan naar per pagina-scope :'(
Wat je wel kunt doen is een fastinit bouwen in je Class die zichzelf instantieert op basis van een aantal Sessie variabelen/arrays. Bouw er ook nog een functie in die diezelfde sessie variabelen weer vult en je hebt bijna dezelfde functionaliteit. Zo hebben wij dit probleem al eens opgelost.

  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
zneek schreef op 02 juni 2004 @ 19:37:
Wat je wel kunt doen is een fastinit bouwen in je Class die zichzelf instantieert op basis van een aantal Sessie variabelen/arrays. Bouw er ook nog een functie in die diezelfde sessie variabelen weer vult en je hebt bijna dezelfde functionaliteit. Zo hebben wij dit probleem al eens opgelost.
Heb je misschien een linkje van hoe dit geimplementeerd moet worden? Of een grove outline ergens?

Mijn idee met het hele Session Class was dat bij het eerste keer aanmelden die object aangemaakt wordt, en de database aangeroepen wordt voor de essentiele informatie (welke rollen heeft de gebruiker, en welke permissies erin). Bij elke volgende vraag, staat deze info al in het geheugen en hoef niet nog een keer opgezocht te worden.


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Darkvater schreef op 04 juni 2004 @ 16:24:
[...]

Heb je misschien een linkje van hoe dit geimplementeerd moet worden? Of een grove outline ergens?

Mijn idee met het hele Session Class was dat bij het eerste keer aanmelden die object aangemaakt wordt, en de database aangeroepen wordt voor de essentiele informatie (welke rollen heeft de gebruiker, en welke permissies erin). Bij elke volgende vraag, staat deze info al in het geheugen en hoef niet nog een keer opgezocht te worden.
Nee, heb ik niet zo een kant en klare implementatie van.

Wanneer je voor het eerst de Class instantieert zet je niet alleen de gegevens in de Class, maar ook in Sessie vars. Je kunt bijvoorbeeld wel een array in de Sessie stoppen.

Wanneer je op een volgende pagina de Class nodig bent roep je de init aan. Deze controleert of een bepaalde Sessie controle var gezet is. Als deze var gezet is init de Class zichzelf op basis van de Sessie vars. Is de betreffende controle var niet gezet dan init hij zichzelf vanuit de db.

Zoiets, maar implementatie is helemaal afhankelijk van de gegevens die je op wilt slaan.

[edit] of je moet van 'classic' asp afstappen en bijv met ASP.Net aan de gang gaan. Daar kun je wel je eigen classes (objecten) in de sessie stoppen.

[ Voor 9% gewijzigd door zneek op 04-06-2004 16:41 ]


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
zneek schreef op 04 juni 2004 @ 16:39:
[...]


Nee, heb ik niet zo een kant en klare implementatie van.

Wanneer je voor het eerst de Class instantieert zet je niet alleen de gegevens in de Class, maar ook in Sessie vars. Je kunt bijvoorbeeld wel een array in de Sessie stoppen.

Wanneer je op een volgende pagina de Class nodig bent roep je de init aan. Deze controleert of een bepaalde Sessie controle var gezet is. Als deze var gezet is init de Class zichzelf op basis van de Sessie vars. Is de betreffende controle var niet gezet dan init hij zichzelf vanuit de db.

Zoiets, maar implementatie is helemaal afhankelijk van de gegevens die je op wilt slaan.

[edit] of je moet van 'classic' asp afstappen en bijv met ASP.Net aan de gang gaan. Daar kun je wel je eigen classes (objecten) in de sessie stoppen.
Ah, zo :D. Ik snap het. Dank je. Ik zal eens kijken of het zo lukt.
Helaas komt er geen ASP.Net, aangezien dan daar de hele server over op moet stappen en dat zullen ze zeker niet doen. In ieder geval zeer bedankt


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Darkvater schreef op 04 juni 2004 @ 22:53:
[...]


Ah, zo :D. Ik snap het. Dank je. Ik zal eens kijken of het zo lukt.
Helaas komt er geen ASP.Net, aangezien dan daar de hele server over op moet stappen en dat zullen ze zeker niet doen. In ieder geval zeer bedankt
Waarom? .Net framework installen en klaar toch? Hoef je echt niet de hele server om te zetten.

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26
zneek schreef op 05 juni 2004 @ 00:28:
[...]


Waarom? .Net framework installen en klaar toch? Hoef je echt niet de hele server om te zetten.
.Net op een gebruikte server is niet echt ideaal, zeker niet in combi met IIS. Een clean install is dan stukken beter.
De kans gestata ook dat de TS het heeft over een extern gehoste site.

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Alex de Groot schreef op 05 juni 2004 @ 01:08:
.Net op een gebruikte server is niet echt ideaal, zeker niet in combi met IIS. Een clean install is dan stukken beter.
De kans gestata ook dat de TS het heeft over een extern gehoste site.
Niet helemaal extern, maar de webserver van het ziekenhuis. En daar gaan ze voor mij op de productieserver echt niet eventjes ASP installeren omdat ik het graag wil hebben :)

Maar als wat zneek zegt goed werkt, vind ik het ook best :+


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Ik zit hier de suggesties te implementeren en het is echt bagger geworden :(

Ik heb het geprobeerd om het netjes te houden, maar van de mooie, onafhankelijke gestructureerde code, is op veel plaatsen niet veel meer over. Kom ik er ook nog achter dat Session natuurlijk alleen maar simpele arrays kan hebben, dus geen arrays van objecten :). Dus zit ik nu heel smerig elk object in een ';' delimited list te maken om op te slaan, en weer terug om het op te halen.

Maar er is een mooie kant aan. Het ziet ernaar uit dat door dit gekloot we over gaan stappen op ASP.NET :*) (stevig gesprek gehad ^^ )


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Darkvater schreef op 08 juni 2004 @ 15:48:
Ik zit hier de suggesties te implementeren en het is echt bagger geworden :(

Ik heb het geprobeerd om het netjes te houden, maar van de mooie, onafhankelijke gestructureerde code, is op veel plaatsen niet veel meer over. Kom ik er ook nog achter dat Session natuurlijk alleen maar simpele arrays kan hebben, dus geen arrays van objecten :). Dus zit ik nu heel smerig elk object in een ';' delimited list te maken om op te slaan, en weer terug om het op te halen.

Maar er is een mooie kant aan. Het ziet ernaar uit dat door dit gekloot we over gaan stappen op ASP.NET :*) (stevig gesprek gehad ^^ )
ziejewel, heeft Johan toch gelijk "elk nadeel hep ze voordeel" ;)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:23

gorgi_19

Kruimeltjes zijn weer op :9

Darkvater schreef op 08 juni 2004 @ 15:48:
Maar er is een mooie kant aan. Het ziet ernaar uit dat door dit gekloot we over gaan stappen op ASP.NET :*) (stevig gesprek gehad ^^ )
* gorgi_19 is benieuwd hoe lang het duurt eer je er achter komt dat ASP en ASP.Net 2 praktisch compleet verschillende dingen zijn. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 24-05 21:13

mulder

ik spuug op het trottoir

* mulder is ook benieuwd of mensen zich wel realiseren wat er bij komt kijken om 'even' over te stappen op een nieuw platform.

oogjes open, snaveltjes dicht


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik persoonlijk vind het wel meevallen omdat je in veel gevallen gefaseerd kunt overstappen. Het session object is nog steeds te misbruiken om data tussen aspx en asp bestanden uit te wisselen, dus je kunt functie voor functie (bijvoorbeeld per onderhoudsscherm) een nieuw stukje code bakken enzo.

En als je VB als codebehind neemt en dat ook al gebruikte met ASP (das veelal het geval) dan kun je met relatief weinig moeite de code herschrijven en op de juiste plaats in je codebehind object plaatsen.

Het is een flinke klus, maar dan heb je ook wat ;)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:23

gorgi_19

Kruimeltjes zijn weer op :9

bigbeng schreef op 08 juni 2004 @ 17:10:
Ik persoonlijk vind het wel meevallen omdat je in veel gevallen gefaseerd kunt overstappen. Het session object is nog steeds te misbruiken om data tussen aspx en asp bestanden uit te wisselen, dus je kunt functie voor functie (bijvoorbeeld per onderhoudsscherm) een nieuw stukje code bakken enzo.

En als je VB als codebehind neemt en dat ook al gebruikte met ASP (das veelal het geval) dan kun je met relatief weinig moeite de code herschrijven en op de juiste plaats in je codebehind object plaatsen.

Het is een flinke klus, maar dan heb je ook wat ;)
Da's puur een syntax kwestie en dat is het minste probleem. VB.Net / C#, iig de achterliggende talen van ASP.Net, zijn volledig OO en vereist een compleet andere manier van denken dat standaard ASP/VBscript. Blijf je op de oude manier doormodderen, dan gaat het een tijdje goed, maar kom je later geheid in de problemen. Ja, je kan idd gefaseerd overstappen. Session objecten uit ASP.Net kan je met een truukje ook in ASP gebruiken en omgekeerd. Echter, om te zeggen dat het makkelijk is; nee. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
gorgi_19 schreef op 08 juni 2004 @ 17:13:
[...]

Da's puur een syntax kwestie en dat is het minste probleem. VB.Net / C#, iig de achterliggende talen van ASP.Net, zijn volledig OO en vereist een compleet andere manier van denken dat standaard ASP/VBscript. Blijf je op de oude manier doormodderen, dan gaat het een tijdje goed, maar kom je later geheid in de problemen. Ja, je kan idd gefaseerd overstappen. Session objecten uit ASP.Net kan je met een truukje ook in ASP gebruiken en omgekeerd. Echter, om te zeggen dat het makkelijk is; nee. :)
Ach ja, beter een half werkende ASP.Net applicatie dan een totaal niet werkende ASP applicatie :)

Ts suc6 iig. .Net is veel om te verhapstukken als je classic asp gewend bent, maar als je er eenmaal wegwijs in bent kun je wel veel meer.

  • HansMij
  • Registratie: Mei 2002
  • Laatst online: 12:03
Is het niet veel beter om die objecten binnen een DLL te bouwen? Op die manier kun je die classes waarschijnlijk veel sneller en efficienter aanroepen.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Beter dan wat? Het topic staat nogal erg vol met verschillende ideeen.

Bovendien is de TS bereid om te gaan overschakelen naar ASP.NET en daar wordt alle code-behind al netjes naar een dll gecompileert. Veel sneller dan dat zal het toch niet worden.

edit:

typo

[ Voor 6% gewijzigd door bigbeng op 08-06-2004 17:32 ]


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
zneek schreef op 08 juni 2004 @ 17:17:
Ts suc6 iig. .Net is veel om te verhapstukken als je classic asp gewend bent, maar als je er eenmaal wegwijs in bent kun je wel veel meer.
Wow, veel reacties opeens :) . Ik zal er geen probleem hebben met ASP --> ASP.NET aangezien ASP mij helemaal vreemd was, en ik alles al objectgeorienteerd heb geimplementeerd (daarom ook de problemen die ik tegengekomen ben, denk ik).

Het verbaasde mij ook inderdaad dat ze opeens bereid waren over te stappen op ASP.NET etc., misschien onderschatten ze de problemen. Wie weet.

Mijn originele idee met dit ASP was eigenlijk om er een COM+ object van te maken, die dan ook geshared wordt door de offline applicatie. Maar dat wilden ze echt niet, een te grote security-risk vonden ze. Oh well, als het maar werkt :)

Als ik weer ga werken, zal ik misschien wat conversie-code posten om andere mensen die zulke problemen hebben op weg te kunnen helpen.


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

Topicstarter
Als beloofd, de conversie code :D

Ten eerste, om sessioning goed op te zetten:
Global.asa
code:
1
session("SQLUser_Initialized") = "0"


En dan in de classe asp file, zo hou ik alles mooi vast tot de sessie afgelopen is:
code:
1
2
3
4
5
6
Private Sub Class_Initialize()
If session("SQLUser_Initialized") = "1" Then Exit Sub End If

Set pcn = session("pcn")
...
session("SQLUser_Initialized") = 1


Dataconversie - naar sessievariabele (Arrayify):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Function Arrayifyc1Permissions()
    ' -- Start Arrayification
    Dim tempie, counter, ArrayList()
    counter = 0
    For Each tempie In pstrc1Permissions
        ReDim Preserve ArrayList(counter)
        ArrayList(counter) = tempie.Object & ";" & tempie.SelectCols & ";" & tempie.UpdateCols
        counter = counter + 1           
    Next
    ' -- End Arrayification      
    Arrayifyc1Permissions = ArrayList
End Function

..
session("pstrc1Permissions") = Arrayifyc1Permissions()


Dataconversie - van sessievariabele (DeArrayify):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub DeArrayifyc1Permissions()
    ' -- Start DeArrayification
    Dim tempie, counter
    counter = 0
    For Each tempie In session("pstrc1Permissions")
        ReDim Preserve pstrc1Permissions(counter)
        Set pstrc1Permissions(counter) = new c1Permissions
        ' values saved as x;y;z
        Dim MyArray
        MyArray = Split(tempie, ";", -1, 1)     
        pstrc1Permissions(counter).Object     = MyArray(0)
        pstrc1Permissions(counter).SelectCols = MyArray(1)
        pstrc1Permissions(counter).UpdateCols = MyArray(2)
        counter = counter + 1
    Next    
    ' -- End DeArrayification           
End Sub

..
DeArrayifyc1Permissions() ' just call function, since value is internal to class


Ik weet het, het kan mooier, en meer generiek, want ik heb het voor alle objecten zo gemaakt die ik moet arrayifyien, maar het werkt wel :). Het zou vast beter kunnen, maar daar moet ik de hele classestructuur voor omgooien, en ik hoop dat ASP.NET snel komt zodat dit een tijdelijke oplossing is. Dan hoef ik maar een paar dingen weg te halen, en hij doet het weer perfect.

[ Voor 24% gewijzigd door Darkvater op 10-06-2004 13:55 ]


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge

Pagina: 1