Toon posts:

[IIS] DNS round robin - global.asa - teller

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik had een vraagje over aantal bezoekers tellen op website. Ik maak gebruik van DNS round robin naar 2 servers om op die manier de load te verdelen. Ik had dus een scriptje gebruik die weer gebruik maakt van global.asa. Het is nu alleen zo dat hij het aantal sessies per server telt, waar de bezoeker een sessie heeft geopend. Uiteraard moet hij de sessies van beide servers tellen.

Heeft imand een idee hoe ik het of anders kan doen of op een andere manier toch gebruik kan maken van het sessie verhaal via global.asa

[ Voor 16% gewijzigd door Verwijderd op 27-01-2005 10:45 ]


Verwijderd

Als je erachter een centrale database hebt hangen kun je in beide global.asa bestanden een teller in de database bij elk bezoek met 1 ophogen. Met gewoon sessies gaat dat niet lukken want die zijn op beide servers dus niet gelijk.

Verwijderd

Topicstarter
Ja hier zat ik idd ook aan te denken. Alleen vraag ik me af hoe ik ga controleren of een sessie nog actief is en als hij niet actief meer is hoe ik hem dan weer uit de DB ga halen. Dit kan ik namelijk niet met ASP gaan om het feit dat als een bezoeker weg is ik geen delete meer op de DB kan gaan doen. Of moet ik gewoon aan een VB script je gaan denken die op de servers plant?

edit:

Ahhh misschien kan ik dit gewoon in de global.asa zelf doen (SQL inser en delete)??

[ Voor 49% gewijzigd door Verwijderd op 27-01-2005 11:24 ]


  • The Lord
  • Registratie: November 1999
  • Laatst online: 23:20
Uhm, je bepaalt nu dat een sessie wordt gestart met iets als 'Session OnStart Event'. Er is ook een 'Session OnEnd Event'.

geeft geen inhoudelijke reacties meer


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:05

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op donderdag 27 januari 2005 @ 10:44:
Heeft imand een idee hoe ik het of anders kan doen of op een andere manier toch gebruik kan maken van het sessie verhaal via global.asa
Heb je zelf al wat geprobeerd? Wat lukte daar niet mee?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ik ga gewoon proberen in OnStart event en OnEnd event een insert en een delete op de DB doen en dan met een count het aantal records tellen

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je kunt je bezoekers ook een "token" geven bij de start van een sessie en in de DB bijhouden welke tokens je hebt uitgedeeld. Op het moment dat de gebruiker dan naar een andere server wordt "ge-load-balanced" kun je toch met dezelfde "sessie" doorwerken. Je moet dan dus wel zorgen dat je die token mee post of in een cookie gooit ofzo.

Je hebt dan geen echte sessies meer, maar als je de sessie dus vervangt door een DB equivalent ben je compleet server-onafhankelijk.

Overigens, ASP.Net kan geloof ik wel overweg met sessies over meerdere servers als ik me niet vergis (heb me er nog steeds niet echt in verdiept)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 16-05 07:20

GrimaceODespair

eens een tettenman, altijd ...

ASP.NET ondersteunt database-sessies via de sessionState directive in je web.config

edit:
gulle bui

XML:
1
<sessionState mode="SQLServer" sqlConnectionString="yourConnectionString" />

[ Voor 60% gewijzigd door GrimaceODespair op 27-01-2005 12:19 ]

Wij onderbreken deze thread voor reclame:
http://kalders.be


Verwijderd

Topicstarter
Verwijderd schreef op donderdag 27 januari 2005 @ 11:27:
Ik ga gewoon proberen in OnStart event en OnEnd event een insert en een delete op de DB doen en dan met een count het aantal records tellen
Ik gebruik helaas geen dot net :(

maar is de oplossing niet goed zoals ik hier boven heb beschreven? Als je dan van server verandert wordt er toch het OnEnd event uitgevoerd op de ene server en een OnSTart op de andere server?

Verwijderd

Topicstarter
Heb de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script language="VBScript" runat="Server">
Sub Session_OnStart
  const constr="dsn=***;Uid=***;pwd=***"
  Set connObj = Server.CreateObject("ADODB.connection") 
  connObj.Open constr
  SQLinsert = "insert into sessieteller values (1)"
  set insertcount = connObj.Execute (SQLinsert)
End Sub   
Sub Session_OnEnd
  const constr="dsn=***;Uid=***;pwd=***"
  Set connObj = Server.CreateObject("ADODB.connection") 
  connObj.Open constr[/td]
  SQLdelete = "DELETE from SessieTeller where id = (select max(id) from SessieTeller)"
  set deletecount = connObj.Execute (SQLdelete)
End Sub
</script>


Hij voert wel netjes het inser statment uit maar voert niet het delete statement uit in de session_onend

enig idee waarom dit zo is?

edit:

las in andere topics al dat session_onend niet echt betrouwbaar is :( hoe moet ik dit dan doen!?!?

[ Voor 49% gewijzigd door Verwijderd op 27-01-2005 14:58 ]


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
wat je kan doen is een timestamp op de sessie tabel. iedere keer werk (op elke pagina) je deze timestamp bij. wanneer de timestamp meer dan x minuten niet is bijgewerkt, verwijder je de sessie.

Geen idee wat voor soort db je gebruikt, maar met mssql kun je dit (het opschonen) eventueel scripten via jobs en stored procedures.
Pagina: 1