webForumDet fria alternativet

Starta en session varje gång en sida körs.

.NET

15 svar · 393 visningar · startad av asmodie

Medlem sedan jan. 2004501 inlägg
Frågan#1

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?

Medlem sedan juni 20019 024 inlägg
#2

Sessions startar automatiskt och kan fångas i Session_Start.

Medlem sedan jan. 2004501 inlägg
#3

Nej du missuppfattar mig.

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.

Medlem sedan maj 20012 812 inlägg
#4

Det finns ingen session från början.

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?

- M

Medlem sedan jan. 2004501 inlägg
#5

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.

Medlem sedan apr. 2004778 inlägg
#6

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.

Medlem sedan apr. 20012 266 inlägg
#7

Sedan kan man fråga sig om det bästa är att lägga inlggningsinformation i sessions, finns faktiskt FormsAuthentication och andra sätt.

Medlem sedan apr. 2004778 inlägg
#8

Ja, FormsAuthentication är väl att rekommendera i ett sådant här fall. :)

Medlem sedan jan. 2004501 inlägg
#9
protected void Application_BeginRequest(Object sender, EventArgs e)
 		{
 			Session["evil"] = "evil";
 		}

Ger felet "Session state is not available in this context."

Medlem sedan apr. 20012 266 inlägg
#10

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.

Medlem sedan jan. 2004501 inlägg
#11

Till mitt problemi så fall. Kan jag spara ett objekt i min forms authentication på något sätt?

Medlem sedan apr. 2004778 inlägg
#12

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?

Medlem sedan maj 20012 812 inlägg
#13

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.

- M

Medlem sedan juli 20022 537 inlägg
#14

Bara att kolla vilket värde

HttpContext.Current.User.IsAuthenticated

har.
True = inloggad
Flase = Inte inloggad

Medlem sedan jan. 2004501 inlägg
#15

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.

Medlem sedan jan. 2004501 inlägg
#16

Hjälp?

273 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
139 ms — ändringar (db)