Toon posts:

[ASP.NET] redirect probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem met het redirecten van iemand die is ingelogd naar de pagina waar hij oorspronkelijk vandaan is gekomen.

De situatie moet als volgt worden:
Iemand klikt op een willekeurige plek op de site op inloggen -> hij vult het formulier in en klikt op de "login" knop -> zijn gegevens worden gevalideerd -> Validatie ok -> Auth waarden worden gezet ( FormsAuthentication.SetAuthCookie( naam, false ) ) -> De gebruiker wordt terug gestuurd naar de pagina waar hij vandaan kwam.

Nu zit het probleem hem in het volgende (vermoed ik), ik heb namelijk het login formulier als control geinclude in de aspx file. Zodra er op submit wordt geklikt wordt de login-formulier.ascx opnieuw geladen met als gevolg dat de "referer" informatie foetsie is :( (waardoor de FormsAuthentication.RedirectFromLoginPage() ook niet werkt)

De code van de ascx file is nu zo: (heb de html eruit gelaten)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<%@ Control Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="microsoft.Data.Odbc" %>
<script runat="server">
    
    sub page_load( o as object, e as eventargs )
        
        if not Page.IsPostback then
            dim url as String
            dim raw_url = Request.Headers.Get( "Referer" )
            url = raw_url.toString
            
            response.write( "URL= " & url )
        end if
    end sub
    
    Sub but_login_Click(sender As Object, e As EventArgs)
    
        Dim objConn as new ODBCConnection ("DRIVER={
        MySQL ODBC 3.51 Driver};Server=localhost;Port=3306;Option=147992;
        Database=Begeer;Uid=admin;Pwd=admin;")

        'Plaats hier de benodigde code voor deze pagina
    
        dim tmp as integer
    
            if gebruikersnaam.Text <> string.empty AND wachtwoord.Text <> 
string.empty then
    
                Dim naam as String
                Dim password as String
                dim query_login as String = "select admin_password, 
                admin_naam from admin where 
                admin_naam = '"& gebruikersnaam.Text &"'  
                and admin_password = '" & wachtwoord.Text & "'"
    
                Dim readerSelect1 As OdbcDataReader
                Dim objSelect1 as new OdbcCommand ( query_login, objConn)
    
                objConn.Open()
                'de select wordt ingelezen
                readerSelect1 = objSelect1.ExecuteReader()
    
                if readerSelect1.Read() then
                ' Open de reader
                    try
                    ' Handle Non-Empty SELECT
                        naam =  readerSelect1("admin_naam").ToString
                        password = readerSelect1("admin_password").ToString
    
                        lbl_error.Text=""
                        lbl_error.Visible = false
    
                        FormsAuthentication.SetAuthCookie( naam, false )
                        response.redirect( url )
                        
                    catch
                    ' Handle Empty SELECT
                        lbl_error.Text="Query error!"
                        lbl_error.Visible = true
                    end try
                else
                    'Query leverde geen resultaten op
                    lbl_error.Text="Onbekende gebruikersnaam/wachtwoord combinatie!"
                    lbl_error.Visible = true
                end if
    
                readerSelect1.close()
                  objConn.Close()
    
            else
                 lbl_error.Text="U heeft niet alle velden ingevuld!"
            end if
    End Sub

</script>


Mijn idee hierachter was dat hij de eerste keer dat de ascx geladen wordt de variabele "url" aanmaakt en hem daarna met rust laat. Maar op de een oftandere manier vergeet hij de url volledig?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:54

mulder

ik spuug op het trottoir

Zou je misschien kunnen uitleggen wat Page.IsPostBack doet?

oogjes open, snaveltjes dicht


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:08

gorgi_19

Kruimeltjes zijn weer op :9

Gaat hij uberhaupt wel de sub in?

Tip: Kijk eens naar het tracing object, kan je precies volgen wat het systeem waar en wanneer in welke volgorde doet. (Alles op je scherm gooien om te debuggen is de ASP way to do it; ASP.Net heeft dat veel netter opgelost.. :))

Daarnaast ook wel benieuwd hoe het systeem reageert als ik
' OR 1=1;-- heet.. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:54

mulder

ik spuug op het trottoir

Sub lijkt me wel, maar dat if statement...... ;)

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Don:
if not Page.IsPostback then

houdt in de hij alleen de eerste keer het stuk code uitvoert, dus als je op een knop drukt op de pagina voert hij die code niet meer uit.

gorgi_19:
Hij voert alles netjes uit, maar als er op de knop is geklikt "vergeet" hij de variabele url die hij eerder heeft gezet (bij de eerste aanroep van de pagina)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:08

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 13 november 2002 @ 11:33:
Don:
if not Page.IsPostback then

houdt in de hij alleen de eerste keer het stuk code uitvoert, dus als je op een knop drukt op de pagina voert hij die code niet meer uit.

gorgi_19:
Hij voert alles netjes uit, maar als er op de knop is geklikt "vergeet" hij de variabele url die hij eerder heeft gezet (bij de eerste aanroep van de pagina)
Aaargh.. Dat ik dat niet eerder zie.. Je moet hem natuurlijk wel in je viewstate zetten!

Uitleg: Je variabele wordt de eerste keer aangemaakt voor die betreffende context. Echter, pagina opgelevert, context weg, variabele weg. Bij de postback wordt deze niet opnieuw aangemaakt (logisch, want anders krijg je de variabele van het inlogformulier als referrer), dus moet je hem op de pagina zetten. Dit kan door middel van een hidden inputbox of Viewstate.

Don Facundo:
Heb ik nu het antwoord verklapt wat jij al wist, maar wilde je hem er zelf achter laten komen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:54

mulder

ik spuug op het trottoir

Verwijderd schreef op 13 november 2002 @ 11:33:
Don:
if not Page.IsPostback then

houdt in de hij alleen de eerste keer het stuk code uitvoert, dus als je op een knop drukt op de pagina voert hij die code niet meer uit.
Precies! Dus die url word niet opgehaald...

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Aaargh.. Dat ik dat niet eerder zie.. Je moet hem natuurlijk wel in je viewstate zetten!

Uitleg: Je variabele wordt de eerste keer aangemaakt voor die betreffende context. Echter, pagina opgelevert, context weg, variabele weg. Bij de postback wordt deze niet opnieuw aangemaakt (logisch, want anders krijg je de variabele van het inlogformulier als referrer), dus moet je hem op de pagina zetten. Dit kan door middel van een hidden inputbox of Viewstate.
Haaa daar was ik dus al bang voor, zal hem eens proberen in een viewstate te zetten!
trace="true" is trouwens best lachen!! veel nuttige info :)

Verwijderd

Topicstarter
w000tnezz dit is echt te easy voor woorden:

code:
1
2
3
4
5
6
7
if not Page.IsPostback then
        
            dim raw_url = Request.Headers.Get( "Referer" )
            url = raw_url.toString
            viewstate.Item("url") = url  
        
        end if


thats all :)
ik hoef niet eens de viewstate aan te maken ofzo, gewoon kant en klaar te gebruiken :P

Verwijderd

Topicstarter
THNX gorgi_19, your my hero again!!! :)
wat is de afkorting voor de worshippy smiley? die heb je dubbel en dwars verdiend :):)

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 19:54

mulder

ik spuug op het trottoir

gorgi_19 schreef op 13 november 2002 @ 11:36:
[...]
Don Facundo:
Heb ik nu het antwoord verklapt wat jij al wist, maar wilde je hem er zelf achter laten komen?
O-) ;)

oogjes open, snaveltjes dicht


  • elmer25
  • Registratie: Februari 2002
  • Laatst online: 01-12-2021

elmer25

ooit was ik 25

Waarom maak je geen gebruik van de System.Web.Security.FormsAuthentication? Hierin zit alles wat je probeert te maken al in!

Verwijderd

Topicstarter
waaa elmer kewle icon!! :)

maar zoals in mijn verhaal staat werkte dat ook niet om dezelfde reden als gorgi beschreef ( hij redirecte dus altijd naar default.aspx omdat hij de originele referer onderweg al verloren was)

  • elmer25
  • Registratie: Februari 2002
  • Laatst online: 01-12-2021

elmer25

ooit was ik 25

sorry, ik had je hele verhaal niet gelezen...
Pagina: 1