2013-04-20 1 views
0

У меня есть MasterPage, который имеет этот код в нем:ASP.NET сеанс остается «0»

<script runat="server"> 



    Protected Sub Page_Load(sender As Object, e As EventArgs) 

     If Session("userid") = Nothing Then 
      txtLoginUser.Visible = True 
      txtLoginPass.Visible = True 

     Else 


      Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True") 
      Dim useridComm As String = "SELECT name, surname FROM users WHERE [email protected]" 
      Dim sqlUserID As New SqlCommand 

      conn.Open() 

      Dim userid As String = Session("UserID") 

      sqlUserID = New SqlCommand(useridComm, conn) 
      sqlUserID.Parameters.AddWithValue("@userid", Convert.ToInt32(userid)) 
      Dim datareader As SqlDataReader = sqlUserID.ExecuteReader() 

      datareader.Read() 
      If datareader.HasRows Then 



       userid = Session("UserID") 

       lblLoggedIn.Text = "[Welcome, " + datareader("name").ToString() & " " & datareader("surname").ToString() + " ]" 
       txtLoginUser.Visible = False 
       txtLoginPass.Visible = False 
       lblUsername.Visible = False 
       lblRegister.Visible = False 
       btnLogin.Visible = False 
       lblUsername0.Visible = False 


      End If 
      datareader.Close() 
      conn.Close() 

     End If 
    End Sub 

    Protected Sub Button1_Click(sender As Object, e As EventArgs) 

     Dim loginSQL As New SqlCommand 
     Dim loginComm As String 

     Dim CommonFunctions As New CommonFunctions() 
     Dim dec_pass As String = CommonFunctions.EncryptPassword(txtLoginPass.Text.Trim) 

     Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True") 


     loginComm = "SELECT user_id FROM users WHERE [email protected] and [email protected]" 

     conn.Open() 


     loginSQL = New SqlCommand(loginComm, conn) 
     loginSQL.Parameters.AddWithValue("@username", txtLoginUser.Text.ToString) 
     loginSQL.Parameters.AddWithValue("@password", dec_pass) 
     Dim dr As SqlDataReader = loginSQL.ExecuteReader() 
     dr.Read() 


     If dr.HasRows Then 
      Session("UserID") = dr("user_id") 

     ElseIf dr.HasRows = False Then 

      lblRegister.ForeColor = Drawing.Color.Red 
      lblRegister.Text = "Incorrect Username/Password." 
     End If 


     dr.Close() 
     conn.Close() 

     Response.Redirect("Default.aspx") 

    End Sub 
</script> 

На Button1 нажмите сценарий должен получить user_id с помощью datareader и создать Session("UserID") и передать его Default.aspx. Default.aspx затем получает Session("UserID") и ищет user_id, который имеет то же значение и проверяет роли с использованием таблицы user_roles, а если role_id равен 4, то отображается tblAdmin, в противном случае это не так.

Это код Default.aspx:

Imports System.Data.SqlClient 

Partial Class _Default 
    Inherits System.Web.UI.Page 



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


     Dim UserID As Integer = Convert.ToInt32(Session("UserID")) 

     Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True") 
     Dim userTypeCommand As String = "SELECT role_id FROM users_role WHERE [email protected]" 
     Dim userTypeSQL As New SqlCommand 

     conn.Open() 

     Try 

      userTypeSQL = New SqlCommand(userTypeCommand, conn) 
      userTypeSQL.Parameters.AddWithValue("@UserID", UserID) 

      Dim datareader As SqlDataReader = userTypeSQL.ExecuteReader 

      If datareader("role_id").ToString = "4" Then 

       tblAdmin.Enabled = True 
       tblAdmin.Visible = True 

      ElseIf datareader("role_id").ToString IsNot "4" Then 

       tblAdmin.Visible = False 

      End If 



     Catch ex As Exception 



     End Try 


     conn.Close() 


    End Sub 

    Protected Sub btnCreateArticle_Click(sender As Object, e As EventArgs) Handles btnCreateArticle.Click 


     Response.Redirect("addArticle.aspx") 

    End Sub 

    Protected Sub btnAdmin_Click(sender As Object, e As EventArgs) Handles btnAdmin.Click 
     Response.Redirect("Admin.aspx") 
    End Sub 
End Class 

Когда я отладки, после того, как я нажимаю кнопку 'Login' поле user_id (Session ('UserID') остается 0, когда в user_id пользователя Я использовал для входа в это «12» в таблице.

Что я делаю неправильно?

Я использую ASP.NET/VB.NET и SQL Server 2012.

+0

попробовал? Session («UserID») = Convert.ToInt32 (dr («user_id»)) – aliassce

+0

@aliassce Да, безрезультатно. – Brian

ответ

0

Fixed его. Если бы отсутствует datareader.Read().