10. april 2006 - 21:08Der er
13 kommentarer og 1 løsning
global.asa: Problemer med at skrive til databasen i Session_OnEnd
global.asa er rimelig nyt for mig, men jeg ser en masse fordele i bl.a. de objekter man kan erklære der, men især også i den eventhåndtering man har mulighed for.
Jeg er f.eks ved at bruge det til at lave et simpelt log system. Når en bruger går ind på siden skriver global.asa i databasen forskellige informationer om brugeren, heriblandt det tidspunkt brugeren er gået ind på siden. Når brugerens session timer ud, så vil jeg gerne skrive det tidspunkt i databasen. Mit problem ligger så i at jeg ikke kan få lov til at skrive til databasen i Session_OnEnd.
Jeg har prøvet med en SQL update sætning, jeg har prøvet med et RecordSet og jeg har sågar prøvet at gentage koden fra Session_OnStart. Er der nogen der kan forklare mig hvorfor jeg ikke kan skrive til databasen?
Koden: Sub Session_OnStart Application.Lock Application("onlinevisitors") = Application("onlinevisitors") + 1 Application.UnLock
Er prøvet, men er det ikke også lige meget så længe det er inden for 2 forskellige subs?
Tro mig jeg synes virkelig alt er prøvet, jeg har ovenikøbet kopieret indholdet af begge subs over i en asp fil og fået det til at virke, men når jeg putte det tilbage i mine event subs, så sker der nada ved Session_OnEnd. Jeg troede et øjeblik at det var fordi den aldrig nåede at køre den sub, men fandt så ud af at tælleren virkede fint.
Hvis du bruger funktionen. Server.Mappath til at finde stien til databasen virker det ikke i Session_OnEnd der skal man bruge fysik sti til database c:\sti\til\databasefil.mdb
Iflg. W3Schools om global.asa (http://www.w3schools.com/asp/asp_globalasa.asp under sektionen "Restrictions" - ca. halvejs nede på siden), står der at man rent faktisk HAR adgang til Server i Session_OnEnd-eventet, så det burde ikke være det der er galt.
Jeg synes dog jeg har hørt at W3Schools har fejlinformeret før, så det kan da godt være at eagleeye har ret (det har man jo hørt om før :)).
Ja w3scoll er en god side men den er dog ikke fejlfri :)
Fra Microssoft: You cannot call the Server.MapPath method in the Session_OnEnd script. By default, Session_OnEnd runs as the Anonymous User, as defined for the application. In the event that there isn't an Anonymous user, or the Logon for the Anonymous user fails, the OnEnd function will not be called, and an event will be logged.
Det betyder faktisk også at det ikke er sikkert man kan tilgå Access filen, med mindre man giver brugeren "Everyone" eller "Alle" skrive rettighed til den folder database filen ligger i.
Jeg kan desværre ikke rigtig se hvordan Server.Mappath kan have nogen indflydelse. Jeg erklærer min connection som et global.asa object, initialiserer connection strengen i Applicatin_OnStart (det er her jeg bruger Server.MapPath) og den virker fint i Session_OnStart...burde den så ikke også virke fint i Session_OnEnd?
I IIS'en er der sat kryds i anonymous access, hvilket betyder at der ikke kræves identifikation for at få adgang til mappen. Er det det du mener? Jeg kender godt til "Sharing and security" på mappen, men fanebladende herunder hedder "General", "Sharing", "Web Sharing" og "Customize". Normalt kan man tilføje "Everyone" under "Sharing" -> "Permissions", men den kan jeg ikke bruge medmindre jeg deler mappen og det er jeg ikke interesseret i.
Der er da en fane som hedder sikkerhed i stifinder under egenskaber for den pågældende folder. Tilgængeligheden af den er ikke afhængig af at man har delt folderen. Der skal Everyone have adgang...
Hvis du har Windows XP kan det måske hjælpe at slå "Simple File Sharing" fra det gøres ved: - Åbn "My Computer" - Klik på menupunktet "Tools" - Vælg "Folder Options..." - Klik på fanen Vis - Fjern flueben i "Simple File Sharing" så mener jeg man får adgang til at sætte det op.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.