Hej,
Nytt problem.
Varje gång någon går in på en sida kollar jag först om jag måste starta upp en session. Detta gör jag under Application_BeginRequest. Detta går inte, man kan inte starta Sessions från global.asax. Någon som har något bra förslag?
Det finns ingen session från början. Så varje gång en sida körs vill jag tex kolla om användaren har en viss coockie. Har användaren den cookien så ska en session startas.
En Session är inget som du startar, utan något som Webservern hanterar. Om du stänger av dem, så stänger du av alla sessioner och kan inte starta enskilda sedan.
Vad är det du vill göra? Och hur hade du tänkt använda sessioner?
Varje gång en sida körs. Vill jag kolla om en cookie finns och om min Session["påloggad"] är satt. Finns cookien hos användaren och "påloggad" inte är satt (== null) ska jag sätte den till "Du är på loggad" (Session["påloggad"] = "Du är på loggad"). Detta vill jag kolla varje gång en körs.
Det verkar som att det handlar om missförstånd. Det du vill göra är att sätta en sessionsvariabel till ett värde, inte starta en ny Session.
Vad är det du försöker göra i Application_BeginRequest nu? Visa gärna koden.
Det ska inte vara några problem att bara lägga till en IF sats för att kolla cookien och om det behövs sätta
Session["påloggad"] = "Du är påloggad"
i If-satsen.
man kan inte starta Sessions från global.asax
Det skall som sagt inte startas någon session för det görs automatiskt.
Sessionshanteringen är inte initierad ännu, dvs BeginRequest ligger innan Sessionhanteringen börjar arbeta.
Som jag sa tidigare kanske det finns en bättre lösning en Sessions, personligen tycker jag att det är relativt onödigt att använda Sessions för authentisering och dyl. Session bör möjligen användas i andra sammanhang så som steg för steg guider där Viewstate t.ex är otillräcklig.
Det som sparas i forms authentication är t.ex. id eller användarnamn på den som är inloggad. Vad är det du vill spara?
Det går även att bygga en egen PrincipalIdentity klass som ärver System.Security.Principal.IIdentity.
På så sätt kan man spara ett "objekt".
Vad syftar du på när du säger att du vill "spara ett objekt"? Vad är det du vill spara?
Ger felet "Session state is not available in this context."
Det är för att webservern inte ännu har kopplat ihop ditt SessionsId med rätt Session. Det finns dock andra Event som du kan testa.
Application_OnAcquireRequestState()
eller
Application_OnPreRequestHandlerExecute
Application_OnPreRequestHandlerExecute är det sista event som exekveras innan sidan processas, så där borde du lätt komma åt dina sessions objekt.
Dock så tycker jag att (Session["påloggad"] = "Du är på loggad") är onödigt uttnyttjande av Sessionerna. Om du använder dig av FormsAuthentication, så kan du kontrollera om du är påloggad eller ej, och med hjälp av denna information så kan du sedan göra en IF sats som skriver ut om du är påloggad eller ej. Då slipper du dubbel lagring av information.
Jag har en egen klass jag har gjort som jag fyller med en massa information om användaren som jag behöver. Med forms authentication så får jag bara med Användarnamn och ett data fält till(tex ID). Jag vill ha med mitt objekt som innehåller användar infomationen.
Informationen som jag vill spara till en början med i alla fall är användarID [int] och skärmnamn(inte username)[string] och användarGroupID[int[]]
Någon får gärna förklara för mig hur jag får med det i principals och forms authentication.
Kan man lagra ett objekt i UserData-delen av forms auth cookien?
En annan sak som jag skulle behöva ha med är ett sätt att kolla att personen som loggar in inte blivit "bort tagen" trots att hans forms authentication cookie finns kvar sen förra gången han var inne. Med andra ord när man går in på siten igen vill jag kolla mot databasen om användaren finns kvar.