Jump to content
jeansantos

Login + Sessions

Recommended Posts

jeansantos

Boa noite, queria pedia ajudar à comunidade num problema que me tem dado algumas dores de cabeça...

Numa aplicação que estou a desenvolver, preciso de uma autenticação... tenho uma página com 2 Text boxes que depois de preenchidas executam um SELECT a uma base de dados Microsoft SQL. Se os dados estiverem correctos, deveriam ser preenchidas sessions e deveria ser feito o redirect para a Default.aspx. Acontece que se os dados introduzidos estiverem incorrectos, é-me apresentada a mensagem de erro. Se os dados estiverem correctos, ele volta à página login.aspx. Por isso me leva a crer que o SELECT esta a ser bem executado.

Login.aspx.vb

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        SetFocus(txt_username)

        img_error.Visible = False
        lbl_error.Visible = False

        If Not IsNothing(Session("ID")) Then
            Response.Redirect("Default.aspx")
        End If

    End Sub

    Protected Sub lnk_submit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles lnk_submit.Click

        'String da ligação
        Dim connection As New SqlConnection("server=Laptop\SQLEXPRESS;uid=usrXPtO;pwd=pwdXPTO;database=dbXPTO")

        connection.Open()

        Dim sql As String = "SELECT ID, Nome, UltNome, NomeCompleto, Username, Password, Grupo FROM tbl_utilizadores WHERE Username = '" & txt_username.Text & "' AND Password = '" & txt_password.Text & "'"

        Dim dt_r As New SqlClient.SqlDataAdapter

        Dim dt_s As New DataSet()

        dt_r = New SqlClient.SqlDataAdapter(sql, connection)

        dt_s = New DataSet()

        dt_r.Fill(dt_s, "tbl_utilizadores")

        Dim countrows As Integer = dt_s.Tables("tbl_utilizadores").Rows.Count

        If countrows = 0 Then

            img_error.Visible = True
            lbl_error.Visible = True

        Else

            Session("ID") = dt_s.Tables("tbl_utilizadores").Rows(0)("ID")
            Session("Nome") = dt_s.Tables("tbl_utilizadores").Rows(0)("Nome")
            Session("UltNome") = dt_s.Tables("tbl_utilizadores").Rows(0)("UltNome")
            Session("NomeCompleto") = dt_s.Tables("tbl_utilizadores").Rows(0)("NomeCompleto")
            Session("Username") = dt_s.Tables("tbl_utilizadores").Rows(0)("Username")
            Session("Password") = dt_s.Tables("tbl_utilizadores").Rows(0)("Password")
            Session("Grupo") = dt_s.Tables("tbl_utilizadores").Rows(0)("Grupo")

            Dim IDGrupo As Integer = dt_s.Tables("tbl_utilizadores").Rows(0)("Grupo")

            'Ver os privilegios
            'String do SELECT
            Dim sql2 As String = "SELECT * FROM tbl_grupos WHERE ID = '" & IDGrupo & "'"

            Dim dt_r2 As New SqlClient.SqlDataAdapter

            Dim dt_s2 As New DataSet()

            dt_r2 = New SqlClient.SqlDataAdapter(sql2, connection)

            dt_s2 = New DataSet()

            dt_r2.Fill(dt_s2, "tbl_grupos")

            'Privilegios de Utilizador
            App_Read = dt_s2.Tables("tbl_grupos").Rows(0)("AppRead")
            App_Write = dt_s2.Tables("tbl_grupos").Rows(0)("AppWrite")
            App_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("AppMod")

            Groups_Read = dt_s2.Tables("tbl_grupos").Rows(0)("GroupRead")
            Groups_Write = dt_s2.Tables("tbl_grupos").Rows(0)("GroupWrite")
            Groups_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("GroupMod")

            Users_Read = dt_s2.Tables("tbl_grupos").Rows(0)("UserRead")
            Users_Write = dt_s2.Tables("tbl_grupos").Rows(0)("UserWrite")
            Users_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("UserMod")

            Turmas_Read = dt_s2.Tables("tbl_grupos").Rows(0)("TurmasRead")
            Turmas_Write = dt_s2.Tables("tbl_grupos").Rows(0)("TurmasWrite")
            Turmas_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("TurmasMod")

            Formandos_Read = dt_s2.Tables("tbl_grupos").Rows(0)("FormandosRead")
            Formandos_Write = dt_s2.Tables("tbl_grupos").Rows(0)("FormandosWrite")
            Formandos_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("FormandosMod")

            Formadores_Read = dt_s2.Tables("tbl_grupos").Rows(0)("FormadoresRead")
            Formadores_Write = dt_s2.Tables("tbl_grupos").Rows(0)("FormadoresWrite")
            Formadores_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("FormadoresMod")

            Salas_Read = dt_s2.Tables("tbl_grupos").Rows(0)("SalasRead")
            Salas_Write = dt_s2.Tables("tbl_grupos").Rows(0)("SalasWrite")
            Salas_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("SalasMod")

            TiposSalas_Read = dt_s2.Tables("tbl_grupos").Rows(0)("TipoSalasRead")
            TiposSalas_Write = dt_s2.Tables("tbl_grupos").Rows(0)("TipoSalasWrite")
            TiposSalas_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("TipoSalasMod")

            Equipamentos_Read = dt_s2.Tables("tbl_grupos").Rows(0)("EquipamentosRead")
            Equipamentos_Write = dt_s2.Tables("tbl_grupos").Rows(0)("EquipamentosWrite")
            Equipamentos_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("EquipamentosMod")

            TiposEquipamentos_Read = dt_s2.Tables("tbl_grupos").Rows(0)("TipoEquipamentosRead")
            TiposEquipamentos_Write = dt_s2.Tables("tbl_grupos").Rows(0)("TipoEquipamentosWrite")
            TiposEquipamentos_Mod = dt_s2.Tables("tbl_grupos").Rows(0)("TipoEquipamentosMod")

            Reports = dt_s2.Tables("tbl_grupos").Rows(0)("Reports")

            Assiduidade = dt_s2.Tables("tbl_grupos").Rows(0)("Assiduidade")

            Response.Redirect("Default.aspx")

        End If

        connection.Close()

Share this post


Link to post
Share on other sites
Caça

Qual é o erro e onde é que dá?

Atenção ao SQL Injection com essa query, devias usar parametros


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
jeansantos

Quando meto os dados correctos em vez de ele me redirecionar para a default.aspx, não... volta para a página login.aspx (sem erro) se meto os dados errados, volta também para a página login.aspx mas já apresenta o erro, o que me leva a crer que o select esta bem feito. Esqueci-me de mecionar que isto está a correr no IIS 7.5. Não sei se é preciso alguma configuração especial para as sessions funcionarem.

Quanto ao SQL injection, o que recomendas que seja feito? Algum link que possa ler para me informar?

Share this post


Link to post
Share on other sites
Caça

Sim, mas qual é o erro? Em que linha?

Já percorreste o código linha-a-linha para ver o que se está a passar?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
jeansantos

            Session("ID") = dt_s.Tables("tbl_utilizadores").Rows(0)("ID")
            Session("Nome") = dt_s.Tables("tbl_utilizadores").Rows(0)("Nome")
            Session("UltNome") = dt_s.Tables("tbl_utilizadores").Rows(0)("UltNome")
            Session("NomeCompleto") = dt_s.Tables("tbl_utilizadores").Rows(0)("NomeCompleto")
            Session("Username") = dt_s.Tables("tbl_utilizadores").Rows(0)("Username")
            Session("Password") = dt_s.Tables("tbl_utilizadores").Rows(0)("Password")
            Session("Grupo") = dt_s.Tables("tbl_utilizadores").Rows(0)("Grupo")

esta parte está correcta?

Share this post


Link to post
Share on other sites
jeansantos

Acho que já sei qual é o problema... Quando faço logout ele nao limpa a session correctamente, porque se eu mudar o nome da cookie no IIS já consigo fazer login.

Qual é o código para este função?

Pelo sim, pelo não, meti estas todas:

        Session.RemoveAll()
        Session.Remove("ID")
        Session.Clear()

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.