2012-07-30 11 views
5

Ho questo codice quando accedere Utente, quella stringa sUserData è impostata correttamente.Autenticazione moduli non valida correttamente Utente

Dim sUserData As String = HttpContext.Current.Request.Cookies("UserID").Value & "|" & HttpContext.Current.Request.Cookies("UserName").Value & "|" & HttpContext.Current.Request.Cookies("UserEmail").Value 

    Dim fat As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, _ 
    HttpContext.Current.Session("UserID"), DateTime.Now, _ 
    DateTime.Now.AddDays(6), True, sUserData, _ 
    FormsAuthentication.FormsCookiePath) 
    HttpContext.Current.Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(fat))) 

allora ho codice in cui posso controllare se l'utente se ha firmato in in un metodo condiviso (statico) in una classe pubblica come questo:

If HttpContext.Current.User.Identity.IsAuthenticated Then 
EndIf 

E questo funziona bene, ma se io mettere la stessa linea in Page_Load invece di un metodo condiviso di una classe non potrà mai entrare in questa informativa Se

If HttpContext.Current.User.Identity.IsAuthenticated Then 
    EndIf 

Perché succede questo, e c'è qualche modo per ri-scrivere questo a lavorare in code- dietro Page_L oad invece di doverlo inserire in una classe, la classe viene utilizzata in un'intestazione per consentire l'accesso a determinate pagine, quindi funziona correttamente. Ma ho bisogno di un altro modo di autenticare l'utente nella pagina Default per cambiare etichette e pulsanti in base al tempo in cui l'utente è connesso o meno, e questo non può essere fatto in una classe.

+0

C'è qualche ragione particolare per cui stai creando manualmente quel cookie invece di usare 'FormsAuthentication.SetAuthCookie()' Il tuo codice potrebbe funzionare, ma .NET lo farà per te. (solo un'osservazione). –

+0

sì, c'è - deve essere così, ci sono già 10k più utenti, e il mio lavoro non è quello di cambiarlo basta far funzionare il mio codice con il db esistente –

+0

Non stai provando a controllare la bandiera nel Richiesta SAME tu crei il cookie? Ciò non funzionerà, poiché il contesto verrà impostato a partire da una richiesta successiva a quella impostata. –

risposta

2

Hai provato a inserire le sostituzioni degli eventi di pagina in una sovrascrittura evento di pagina effettiva (ad esempio OnLoad) anziché l'implementazione di hook di evento Page_Load? Più performante (meno livelli di invocazione), leggera differenza nel ciclo di vita che può soddisfare le tue esigenze e può distillare la causa di questi sintomi.

Ci può essere una condizione di sequestro/razza se il contesto della chiamata del metodo statico e il Page_Load, penso che Wiktor Zychla ti abbia già indicato nella direzione del violinista.

+0

L'ho capito, era nella giusta direzione - il mio sUserData era sempre corretto, ma non mi ero reso conto che la sessione (" UserID ") non era impostata allora l'intero ticket di autenticazione non viene impostato, in realtà viene impostato, ma il valore è vuoto –

Problemi correlati