webForumDet fria alternativet

NullReferenceException, för vissa

.NETur .NET

12 svar · 711 visningar · startad av Vide

VideMedlem sedan dec. 19998 577 inlägg
#1

Har någon varit med om att någon enstaka person/dator får ett felmeddelande, men för de allra flesta fungerar det perfekt?

Det är alltså en kund som på sin egen dator inte kan logga in på våra sajt, då får hon ett NullReferenceException, men när hon testar på en annan dator så går det hur bra som helst.

Hur kan samma procedur fungera på olika sätt (i en applikation) på två olika datorer?

Hon kör IE7, cookies och javascript är aktiverat och krävs. Längst ned i hennes IE7 så finns en ikon (ett vitt fönster med ett utropstecken), denna vet jag inte vad den gör.

Någon som har en aning?

Mvh, Vide

emissionMedlem sedan dec. 19996 721 inlägg
#2

Börja med att ta reda på vad som är null.

VideMedlem sedan dec. 19998 577 inlägg
#3

emission skrev:

Börja med att ta reda på vad som är null.

Precis vad jag hade gjort om jag kunde återskapa problemet. Det som förvirrar mig är att det skiljer sig beroende på vilken dator hon använder, och hur det kan skapa ett applikationsfel i websajten.

Felet kommer vid OnClick på submitknappen, men jag kan inte se att någonting i den skulle kunna bli null... och framförallt att det skulle skilja sig mellan vilka system man använder.

KoplikMedlem sedan juli 20011 129 inlägg
#4

Vide skrev:

Hon kör IE7, cookies och javascript är aktiverat och krävs. Längst ned i hennes IE7 så finns en ikon (ett vitt fönster med ett utropstecken), denna vet jag inte vad den gör.

Skjuter lite i mörkret här...
Brukar inte dom ikonerna symbolisera Javascript-errors? Går det att dubbelklicka på ikonen? Bör inte vara det, men jag har själv varit med om javascript-errors på olika datorer som dock har samma konfiguration.

BrutalDeluxeMedlem sedan nov. 200650 inlägg
#5

Vide skrev:

Hon kör IE7, cookies och javascript är aktiverat och krävs. Längst ned i hennes IE7 så finns en ikon (ett vitt fönster med ett utropstecken), denna vet jag inte vad den gör.

Det är phishing-skyddet i IE7 som ser ut så... Men jag tror inte denna har med saken att göra.

clarkbonesMedlem sedan feb. 20013 023 inlägg
#6

Vide skrev:

Precis vad jag hade gjort om jag kunde återskapa problemet. Det som förvirrar mig är att det skiljer sig beroende på vilken dator hon använder, och hur det kan skapa ett applikationsfel i websajten.

Felet kommer vid OnClick på submitknappen, men jag kan inte se att någonting i den skulle kunna bli null... och framförallt att det skulle skilja sig mellan vilka system man använder.

Det är väl "bara" att lägga till lite kod för att logga felet?

emissionMedlem sedan dec. 19996 721 inlägg
#7

Kan du dela med dig av OnClick-handlern?

VideMedlem sedan dec. 19998 577 inlägg
#8

emission skrev:

Kan du dela med dig av OnClick-handlern?

Här är den:

  public void loginUser( object sender, EventArgs e )
  {
    string _password = passwordTextBox.Text;

    if ( terms.Checked )
    {
      if ( true == aglobals.User.loadUser( false, "", true, _password ) )
      {
        string _strQuery;
        
        _strQuery = 
          "insert into xyz" +
          " (login_id,ipaddress,referer)" +
          " values(" +
          "'" + aglobals.User.getValueAsInt32( "login_id" ) + "'," +
          "'" + Request.ServerVariables[ "REMOTE_HOST" ].ToString() + "'," +
          "'" + Request.ServerVariables[ "HTTP_REFERER" ].ToString() + "')";
          
        aglobals.queryDB( _strQuery );
          
          FormsAuthentication.SetAuthCookie( "user", false );
          Response.Redirect( "main.aspx" );
      }
      else
      {
        if( aglobals.User.getErrCode() == 1 )
        {
          errormsgLiteral.Text = "<br />" + aglobals.User.getErrMsg();
        }
        else
        {
          errormsgLiteral.Text = "<br />The password you entered was wrong. Please try again.";
        }
      }
    }
    else
      errormsgLiteral.Text = "<br />You must accept the terms and conditions.";
  }

aglobals är ett globalt objekt som alltid initialiseras.

emissionMedlem sedan dec. 19996 721 inlägg
#9

Saker som skulle kunna vara null:

passwordTextBox
terms
aglobals
aglobals.User
errormsgLiteral
Request.ServerVariables[ "REMOTE_HOST" ]
Request.ServerVariables[ "HTTP_REFERER" ]

Av dessa är det HTTP_REFERER som är den mest sannolika boven. Skippa ToString(). Den är nämligen redan en sträng, vilket även gäller REMOTE_HOST.

I övrigt bör du använda parametriserade frågor. Rent teoretiskt är sidan över för HTTP header SQL Injection.

VideMedlem sedan dec. 19998 577 inlägg
#10

passwordTextBox, terms och errormsgLiteral är serverside-objekt i aspsidan, kan dom rent teoretiskt vara null då?

aglobals och aglobals.User initieras alltid i page_load.

Request.ServerVariables[ "REMOTE_HOST" ] och Request.ServerVariables[ "HTTP_REFERER" ] kan visserligen vara null, skall testa att kontrollera dessa...

Av dessa är det HTTP_REFERER som är den mest sannolika boven. Skippa ToString(). Den är nämligen redan en sträng, vilket även gäller REMOTE_HOST.

Jag testade att skriva in adressen rakt av, men den blev inte null. Finns det något annat sätt som den blir null av?

Men jag håller med, det borde rimligtvis bara kunna vara servervariablerna som skulle kunna bli null, annars problemet uppstått hos flera användare.

I övrigt bör du använda parametriserade frågor. Rent teoretiskt är sidan över för HTTP header SQL Injection.

Tack, bra tips!

emissionMedlem sedan dec. 19996 721 inlägg
#11

Vide skrev:

Jag testade att skriva in adressen rakt av, men den blev inte null. Finns det något annat sätt som den blir null av?

Det är inte alls orimligt att webbläsaren inte skickar med HTTP_REFERER.

GladhMedlem sedan maj 20012 812 inlägg
#12

emission skrev:

Det är inte alls orimligt att webbläsaren inte skickar med HTTP_REFERER.

Det stämmer, för om du öppnar din webläsare och skriver in en url direkt på sidan, så har man ingen HTTP_REFERER eftersom man inte kommer från någon sida. Men läsare kanske är så smart att den själv lägger till den information eftersom den vet vilken sida du är på. Det är dock inget som jag har hört något om... och stöds garanterat inte av några standards.

- M

emissionMedlem sedan dec. 19996 721 inlägg
#13

Gängse standard i webbläsare är att HTTP_REFERER inte skickas med, annat än när man klickar på en länk eller när t.ex. en bild hämtas på en sida. Webbläsare/proxyservrar etc. kan välja att skicka med dem ännu mer sällan, men att skicka med den mer ofta vore ett brott mot HTTP-standarden.

130 ms totalt · 3 externa anrop · v20260731065814-full.b2af184d
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)