webForumDet fria alternativet

Kolla användare med dess id

.NET

11 svar · 524 visningar · startad av trexter

Medlem sedan mars 20021 889 inlägg
Frågan#1

Halloj i stugan!
Jag håller på¨att bygga ett system där man måste registrera sig för att få tillgång till ett visst material.

Jag använder FormsAuthentication och undrar hur jag ska kunna kolla användarens id-nr på olika sidor inom systemet.

Jag har läst att det ska finnas en cookie (eller hur?) som den här FormsAuthentication-historian skapar som innehåller användarnamnet.

Men om det endast finns sparat i en cookie är det ju inte svårt för användaren att gå in och ändra sitt cookievärde och få tillgång till information han inte ska ha?!

Hur brukar ni lösa detta? Kanske man ska kryptera värdet i kakan, eller köra med någon session eller - vad?

:)

Medlem sedan feb. 20038 inlägg
#2

Kakan krypteras automatiskt om den skapas med Forms Auth.

Medlem sedan mars 20021 889 inlägg
#3

Ok, bra! Tackar!

Medlem sedan dec. 2000537 inlägg
#4

Vad är det för fel på sessions nu då? :l

Medlem sedan apr. 20012 266 inlägg
#5

Prästen skrev:

Vad är det för fel på sessions nu då? :l

Vet inte om man ska säga att det är något fel på session utan att det finns bättre alternativ, dock har sessions en nackdel, data sparas i serverns internminne, många användare = stor minnesanvändning.

Medlem sedan juli 20022 537 inlägg
#6

Re: Kolla användare med dess id

trexter skrev:

Halloj i stugan!
Jag använder FormsAuthentication och undrar hur jag ska kunna kolla användarens id-nr på olika sidor inom systemet.

Jag har den här koden för det:

Imports System.Web
Imports System.Data
Imports System.Data.OleDb

Namespace CyberZone.Data
    Public Class UserInfo
        Public Overloads Shared Function GetUserid()
            Dim CnStr As String = "Din databaskoppling"
            Dim SQL As String = "SELECT id FROM tblUsers WHERE Username = '" & HttpContext.Current.User.Identity.Name & "'"
            Try
                Dim Cn As New OleDbConnection(CnStr)
                Cn.Open()
                Dim Cm As New OleDbCommand(SQL, Cn)
                Dim Result As Object
                Result = Cm.ExecuteScalar()
                Cn.Close()
                Return CStr(Result)
            Catch ex As Exception
                Throw ex
            End Try
        End Function

        Public Overloads Shared Function GetUserid(ByVal Username As String)
            Dim CnStr As String = "Din databaskoppling"
            Dim SQL As String = "SELECT id FROM tblUsers WHERE Username = '" & Username & "'"
            Try
                Dim Cn As New OleDbConnection(CnStr)
                Cn.Open()
                Dim Cm As New OleDbCommand(SQL, Cn)
                Dim Result As Object
                Result = Cm.ExecuteScalar()
                Cn.Close()
                Return CStr(Result)
            Catch ex As Exception
                Throw ex
            End Try
        End Function
    End Class
End Namespace

Om man anropar GetUserid() returneras id-numret för personen i sig och om man anropar GetUserid("Pelle") kommer id-numret för användaren "Pelle".

Medlem sedan jan. 20012 204 inlägg
#7

renholm skrev:

Prästen skrev:

Vad är det för fel på sessions nu då? :l

Vet inte om man ska säga att det är något fel på session utan att det finns bättre alternativ, dock har sessions en nackdel, data sparas i serverns internminne, många användare = stor minnesanvändning.

Finns altenativ till det. Det bästa är väl i så fall att spara det i MSsql men även det har ju sina nackdelar!

Medlem sedan apr. 20012 266 inlägg
#8

P skrev:

renholm skrev:

Prästen skrev:

Vad är det för fel på sessions nu då? :l

Vet inte om man ska säga att det är något fel på session utan att det finns bättre alternativ, dock har sessions en nackdel, data sparas i serverns internminne, många användare = stor minnesanvändning.

Finns altenativ till det. Det bästa är väl i så fall att spara det i MSsql men även det har ju sina nackdelar!

Ja, eller lägga det på en egen server, fast försöker låta bli att använda sessions då det inte är absolut nödvändigt.

Medlem sedan dec. 200283 inlägg
#9

Finns det något sätt att spara något mer värde om användaren i cookien förutom "Current.User.Identity.Name" ? Annars måste det ju göras en databasfråga för varje sida där man vill ha fram lite mer användarinfo.

Medlem sedan juli 20022 537 inlägg
#10

Du kan skapa en egen klass som har hand om det där du inheriterar System.Web.Security och sedan bygger ut den och skapar därmed egna cookies för det.

Oj vilken lång mening ;)

Medlem sedan dec. 200283 inlägg
#11

Meningen var inte bara lång. Den var svårförståerlig också :(

Skulle verkligen uppskatta om någon kunde förklara lite nämre och kanske även infoga ngt enklare exempel :r

Medlem sedan juni 20019 024 inlägg
#12

Du kan lägga till egna värde i Authentication ticket, och du kan bygga ut den för att ta emot mer data.

Exempel: http://www.dotnet247.com/247reference/msgs/10/54325.aspx

253 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)