23. september 2002 - 16:30Der er
15 kommentarer og 1 løsning
session("ID") skal være den samme som post i db
Jeg vil gerne lave lidt statistik på min hjemmeside og jeg har så fundet ud af med mig selv at hver besøgende skal have en session og et tilhørede ID - oplysningerne lagrer jeg i en database.
Det jeg gerne vil er at session("ID") skal være den samme som posten i min 'ID' kolonne i min dg - hvordan gør jeg det?
For jeg kan jo ikke vide hvilken ID den får i databasen, når jeg setter session("id") ...
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Du kan ikke tildele Session("ID") nogen værdi, men du kan i din database sætte id feltet til værdien af Session("ID") - dette kræver dog at du ikke sætter nogle autonumber eller identity på feltet i din database. Du kan dog stadig godt have et index over feltet. Det der er lidt farligt er hvis din webserver giver sig til at give to session's samme id. Så er du jo lidt på den. En bedre ide ville være at have et database genereret ID felt og et felt med din Session("ID") i samme tabel, og derved kunne kæde disse sammen.
jeg vil lave en session.... i den vil jeg lave session("ID")
session("ID") skal sættes til en unik værdi. Den ID skal være mage til feltet 'ID' i en post jeg opretter ved samme lejlighed. Men hvordan får jeg session("id") til automatisk at blive det samme som 'id' i databasen?
Session("ID") vil være unik for det på gældende tidspunkte på webservern, men jeg tror ikke der er nogen garanti for at Session("ID") er unik for altid. Derfor ville jeg lave en tabel i databasen ex. TBLLog (LogID [Autonumber / identity], SessionID [string], osv. ) Du behøver ikke at oprette session da det sker af sig selv, du indsætter den bare i din database ex: INSERT INTO TBLLog (SessionID, ..) VALUES ('"+ Session("ID") +"', ...)
Ok - men så er der hvist kun den alternative løsning tilbage, hvor du skriver din record i databasen når brugeren logger ind [On Session start] og så selecter id'et på denne record [select @@identity AS UserLogID]. Sidst men ikke midst tildeler du session objektet denne værdi [Session("UserLogID") = rs("UserLogID")]. Håber du kan benytte en af de skitserede løsninger. Hvis ikke er jeg bange for at jeg ikke har forstået opgaven korrekt :-(
if session("UserID") = "" then Set rs = Server.CreateObject("ADODB.Recordset") sql = "INSERT INTO tab (Ting1, Ting2) VALUES ('"+ request.form("Ting1") +"', '"+ request.form("Ting2") +"');select * from tag where id = @@identity " rs = conn.execute(sql) session("UserID") = rs("id") else
det kan være jeg er dum men jeg kan ikek få det til at virke... kan du ikke lave et komplet eksempel i en asp-fil og sende det til arj@staind.dk - så får du pts zyb
Har lige lavet ASP filen, du får den her: <% ' Create db connection Set Conn = Server.CreateObject("ADODB.Connection")
' Open connection to DB - remember to change this reference to db. Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="& server.mappath("db.mdb") &"; "
' Create recordset Set rs = Server.CreateObject("ADODB.Recordset")
' Chek if Session allready created if session("UserID") = "" then ' Create insert SQL statement sql = "INSERT INTO TABLE1 (Field1, Field2) VALUES ('"+ request("Ting1") +"', '"+ request("Ting2") +"')" ' Execute insert. Conn.execute(sql) ' Create select SQL statement to retrieve DB identity sql = "select @@identity AS ID" ' Execute select sql statement rs = conn.execute(sql) ' Assign DB id to Session object session("UserID") = rs("ID") else ' Session allready created do something else - for debug print info about user. sql = "SELECT * FROM TABLE1 WHERE ID ="& Session("UserID") rs = conn.execute(sql) response.write "UserID :" & Session("UserId") &"<br>" response.write "Field1 :" & rs("Field1") &"<br>" response.write "Field1 :" & rs("Field1") &"<br>" end if %>
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.