Hej! God dag! Jodå, det går att ersätta original SessionState saken till 100% procent. Annars kan det bli problem med saker man inte har 100% kontroll på, t.ex. färdiga kontroller eller gammal kod. Problemet är bara att man måste ta över all hantering själv. Skitfräckt om det funkar iofs, är du säker på det? jag har ingen aning. Har nu "tagit steget" och skapat ett workspace på GotDotNet (OwnSessionStates.NET)Session States i mysql?
Har lite problem när det gäller session states. Nu körs de få existerande sidor som finns (just nu) på en server, men det kommer att bli flera servrar. Jag vill ha alla session states lagrade centralt då. Kruxet är bara att state services kan hänga sig och då är allt borta. Och mssql-alternativet går inte. Mysql vill jag däremot använda.
Någon som vet någon komponent/kod som klarar det, session states i mysql? Uppgiften i sig är ju inte helt omöjlig; med hjälp av Reflector har jag förstått hur original-saken fungerar. Det som dock stör mig mest är några saker: 1) Interfacet IStateClientManager är privat 2) Det går inte att lägga till sin egen sådan även om det interfacet är publikt.
Om man måste skriva allt själv så måste man ta över rubbet, dvs. att leta efter cookies, att kolla url:en etc. Iofs. en massa klippa/klistra, men ändå.
Så... Som sagt: någon som vet något som kan klara detta (med eller utan modifikation) eller är intresserad av ett samarbete?Sv: Session States i mysql?
Ingen aning om det där går, men jag hade nog gjort så här:
Stäng av allt vad session state heter och hantera det manuellt.
Ett snyggt sätt för detta kan vara att du gör en basklass "MyWebBase" som ärver
System.Web.UI.Page
Sedan ärver alla dina codebehind klasser MyWebBase i stället för System.Web.UI.Page.
I MyWebBase.Page_load styr du upp egna cookies med de states du vill ha, inkl lagring i MySQL databas.
Det är inte så himla mycket jobb faktiskt och du får ju full koll på allt.
Ett alternativt angreppsätt är att spara tillstånd i ViewState.
OlaSv: Session States i mysql?
I princip handlar det om att avregistrera en HttpModule som ärvs ifrån Machine.config, lägga till en egen där. Den ska sedan lyssna på vissa events. + lite till. Vad den ska göra innan själva Page-laddar är att registrera sin egen HttpSessionState (publik klass.)
Magisk kod (fårn Reflector, klassen System.Web.SessionState.SessionStateModule.CompleteAcquireState()):
<codec#>
this._rqSessionState = new HttpSessionState(this._rqId, this._rqDict, this._rqStaticObjects, this._rqTimeout, this._rqIsNewSession, SessionStateModule.s_config._isCookieless, SessionStateModule.s_config._mode, this._rqReadonly);
this._rqContext.Items.Add("AspSession", this._rqSessionState);
</code>
Som du ser på översta raden skapas ett helt vanligt SessionState-objekt. Där stoppas ett antal saker in. _rqDict är det roligaste. Det är en dictionary som är privat dock. Likaså konstruktorn för HttpSessionState-klassen. Det går dock lätt att övervinna med reflection. Den andra raden är också rolig. Det är där man stoppar in den här SessionState-saken. När sidan sedan laddas sätt HttpContext.Session till den utifrån det som ligger i collectionen.
Någon som är intresserad?Sv: Session States i mysql?
Men jag hade nog inte valt att göra så.. det blir ju mycket mer jobb till inte så mycket större nytta, anser jag.. :)
OlaSv: Session States i mysql?
Steg ett är att i princip kopiera rubbet ifrån de dumma System.Web.SessionState.* klasserna samt några andra låsta... :/