119 messaggi dal 10 febbraio 2003
Buongiorno e scusate per il titolo. Il mio quesito è questo:
Uso il meccanismo di autenticazione integrato di ASP.NET con SQL e la membership. Tutto funziona bene ma c'è una cosa che non capisco e che mi da un po fastidio. Ogni volta che modifico qualcosa circa il profilo dell'utente, questo appare come utente autenticato online. Si potrebbe evitare questo comportamento?

Grazie e buon proseguimento di giornata.

joshi
119 messaggi dal 10 febbraio 2003
Scusate, ma rinnovo la mia questione visto che non ho ricevuto risposte.

Grazie.

joshi
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, mi spiace ma non riesco a riprodurre il problema.

Aggiornando un MembershipUser con il metodo Membership.UpdateUser, la sua proprietà .IsOnline non viene alterata. Se l'utente era offline prima dell'aggiornamento, continuerà ad esserlo anche dopo.

Infatti, il valore della proprietà .IsOnline dipende unicamente da .LastActivityDate, ovvero dall'ultima data/ora in cui l'utente è stato visto online.

Se impostassi la proprietà .LastActivityDate a DateTime.Now, allora sì che lo vedrei online ma questo sarebbe un errore perché solo il membership provider dovrebbe preoccuparsi di aggiornarne il valore.

Assicurati che il tuo codice non vada a modificare la proprietà .LastActivityDate.
Inoltre controlla che, nel database, il tipo del campo LastActivityDate nella tabella aspnet_Users non sia un timestamp, ma un datetime.

ciao,
Modificato da BrightSoul il 03 novembre 2011 21.09 -

Enjoy learning and just keep making
119 messaggi dal 10 febbraio 2003
Innazitutto, buongiorno e grazie per la tua risposta.
Una parte del mio codice va a modificare alcune proprietà del profilo di un utente.
Posto una parte del codice.
ProfileCommon aa = Profile.GetProfile(usrCurr.Text);
MembershipUser utente = Membership.GetUser(usrCurr.Text);
                aa.clienteAnagrafica.ragSoc = Server.HtmlEncode(profFatRagSoc.Text);
                aa.clienteAnagrafica.pIva = Server.HtmlEncode(profFatPIva.Text);
                aa.commerciale.iva = Server.HtmlEncode(iva.Text);
                aa.clienteAnagrafica.nome = Server.HtmlEncode(txtNome.Text);
                aa.clienteAnagrafica.pNote = Server.HtmlEncode(profNote.Text);
                comunicazioni.Text = "Utente aggiornato con successo";
                ...
                aa.Save();

Ho controllato il campo LastActivityDate e risulta un datetime. In realtà, quando entro nella pagina di modifica dati, anche se clicco su annulla (che mi riporta alla pagina precedente) e quindi non modifico nulla, l'utente appare onLine. Il codice di page load è il seguente:
 protected void Page_Load(object sender, EventArgs e)
    {


        if (!Page.IsPostBack)
        {
            usr = Request.QueryString["xxxx"];
            if (xxx!= null)
            {

                MembershipUser utente = Membership.GetUser(usr);
                bindDropRol(); //questa è una dropdownlist dove carico i ruoli
                ProfileCommon aa = Profile.GetProfile(xxx);
                PasswordRecovery1.UserName = aa.UserName;

                if (User.IsInRole("amministratore"))
                {
                    usrCurr.Text = aa.UserName;
                    foreach (string lblrol in Roles.GetRolesForUser(aa.UserName))
                    {
                        lblRuolo.Text += lblrol;
                    }
                    profFatRagSoc.Text = aa.clienteAnagrafica.ragSoc;
                    profFatPIva.Text = aa.clienteAnagrafica.pIva;
                   ---
                }

            }
            else
            {
                Response.Redirect("default.aspx");
            }
        }
    }


Non riesco a capire, non tocco la proprietà LastActivity

joshi
11.886 messaggi dal 09 febbraio 2002
Contributi
gionapper ha scritto:

In realtà, quando entro nella pagina di modifica dati, anche se clicco su annulla (che mi riporta alla pagina precedente) e quindi non modifico nulla, l'utente appare onLine


urca, è vero, lo noto solo ora. Basta anche soltanto leggere una proprietà del profilo, e la LastActivityDate viene aggiornata automaticamente da una delle stored procedures che si trovano nel database della membership.

Nello specifico, si tratta di queste due stored procedures: aspnet_Profile_GetProperties (in lettura) e aspnet_Profile_SetProperties (al salvataggio).
Non ho la più pallida idea del perché vadano ad aggiornare la LastActivityDate, specie perché il profilo può essere aggiornato - come nel tuo caso - indipendentemente da quale sia l'utente loggato.

Volendo potresti modificare le stored procedures per eliminare questo comportamento, ma forse è il caso di fare qualche ricerca in più prima di metterci le mani (?)

Comunque... se sei uno che ama le imprese avventurose, da aspnet_Profile_GetProperties commenta questo pezzo:
/* IF (@@ROWCOUNT > 0)
   BEGIN
        UPDATE dbo.aspnet_Users
        SET    LastActivityDate=@CurrentTimeUtc
        WHERE  UserId = @UserId
   END*/


mentre da aspnet_Profile_SetProperties commenta questo:
    /*UPDATE dbo.aspnet_Users
    SET    LastActivityDate=@CurrentTimeUtc
    WHERE  UserId = @UserId*/


ciao,

Enjoy learning and just keep making
119 messaggi dal 10 febbraio 2003
Grazie mille, ho provato in locale e sembra funzioni. Ciò si verifica anche quando crei un utente ma, in quel caso non mi importa (per il momento).

Testo ancora un po, pare che funzioni bene ora.


Grazie ancora e buona giornata

joshi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.