Jag vill köra följande SQL kod när man loggar ut från mina sidor, det blir väl när man stänger sessionen och även om man stänger browserfönstret men då dör väl sessionen automatiskt? Hej har nu skrivit så här men det fungerar inte särskilt bra, körs global.asa innan allt annat eller efter? Är kundnr av typen tal så borde det se ut så här: Det betyder att du inte skapar något recordset vilket man inte gör när man updatar eller deletar. Du kan inte använda Sessions variabler. Eftersom dessa är frigjorda i Sesson_OnEnd(). Använd istället: Session.SessionId för att identifiera en sesion med post i databasen. Nu är det så att jag använder Session("user") på hela webbplatsen, något sätt måste ju finnas att ta bort allt från databasen med ett visst nummer Lägg till ett fält i tabellen som du lagrar SessionId när du skapar posten. Sedan tar du bort den med: hmm, tål att tänkas på får nog luska lite på det, återkommer om jag får fler problem tackar för hjälpen så länge Min global.asa ser nu ut så här och jag kör Session.Abandon men det händer ingenting Testa att skriva Session.SessionID till fil vid start och stop. Kontrollera att det är identiska. Ja de är identiska, skriver jag rätt i global.asa man behöver inte ha Dim och en massa connectionstrings och sånt? Det har jag på de andra sidorna Du måste ha connectionstrings och sånt i global.asa också. Har nu gjort så här men det går inte heller Du är helt ute och cycklar. Det är inte jag som bestämt att det ska vara olika användare, vad menar du med att sessionsobjektet är tomt, var då? Session's variablerna frigörs. Så eventuella värden i dem finns inte längre kvar. Eftersom den inte rapportera fel är det svårt att se vad som blir fel. Eftersom jag använder Borland Interbase som databas så har jag lagt upp olika användare på databasen och det har jag inte så mycket att säga till om, inte jag som bestämt det, sessionkolumnen i databasen har jag gjort till Char(40) så därför använder jag enkelfnuttar och det ska väl gå bra Ändra dtatypen till Integer. Sparar du plats 40byte vs 4byte. vad är connection pooling? det är max 5-10 st som kommer vara inloggade samtidigt. Connection Pooling innebär att anslutningen inte dör när du stänger den utan den blir tillgänglig i Connection Pool'en. När du öppnar ett recordset så kollar den om det finns en likadan connection i connection pool'en. Om det inte finns skapas en. ok, tror ändå inte det kommer bli ett problem med kapaciteten i och med att vi är så få. Anledningen till att vi har användare är att en vanlig anställd ska kunna lägga till en användare enkelt med hjälp av ett delphiprogram en programmerare här har gjort.Ta bort ur databas när session dör
DELETE * FROM TEMPTAB WHERE KUNDNR = '" & Session("user") "'
Hur kan jag smidigast lösa det. Är tacksam för exempel.Sv: Ta bort ur databas när session dör
Du kan använda session_en_end i global asa som trigas när en session dör. Den är dock inte hundragunnar så den kombinerad med att du sparar i en databs när dom enast lada om en sida och sin vid typ en inlogning eller likande så kollar du i databsen efter gamla som inte finns mer och tar bort dom där.
Det med att stänga fönstret så kan du använda BODY ONUNLOAD och kalla på en sida som kör din fråga.
/jonberSv: Ta bort ur databas när session dör
använd "Sub Session_OnEnd"
kolla här:
http://mike.elit.net/Braindump/asp/whoson.asp
.OlaSv: Ta bort ur databas när session dör
<code>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnEnd
SQL = "DELETE FROM TEMPTAB WHERE KUNDNR = '" & Session("user") & "'"
Set RS = Conn.Execute(SQL)
End Sub
</SCRIPT>
</code>Sv: Ta bort ur databas när session dör
<code>SQL = "DELETE FROM TEMPTAB WHERE KUNDNR = " & Session("user") </code>
Lägg även till detta:
Set RS = Conn.Execute(SQL),,128
Och sedan så har du väl även med connectionsträngen?! Sv: Ta bort ur databas när session dör
Sv: Ta bort ur databas när session dör
Sv: Ta bort ur databas när session dör
Sv: Ta bort ur databas när session dör
"DELETE FROM TEMPTAB WHERE SessionId = " & Session.SessionIdSv: Ta bort ur databas när session dör
Sv: Ta bort ur databas när session dör
<code>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnEnd
SQL = "DELETE FROM TEMPTAB WHERE SESSION = '" & Session.SessionID & "'"
Set RS = Conn.Execute(SQL)
End Sub
</SCRIPT>
</code>Sv: Ta bort ur databas när session dör
Sv: Ta bort ur databas när session dör
Sv: Ta bort ur databas när session dör
Sv: Ta bort ur databas när session dör
connect.asp ser ut så här
<code>
<!--include virtual="adovbs.inc"-->
<%
'Ansluter och kollar om användaren finns i databasen och att user och pass är rätt annars skickas till swe_fellogin.asp
Dim Conn, user, pass
On Error Resume Next
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=testdatabas", Session("user"), Session("pass")
If Err.Number <> 0 then
Response.Write "Du är utloggad"
Else
End If
%>
</code>
global.asa
<code>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
<%
Session("user")
Session("pass")
%>
<!--#include file="connect.asp"-->
Sub Session_OnEnd
Dim SQL, RS
SQL = "DELETE FROM TEMPTAB WHERE SESSION = '" & Session.SessionID & "'"
Set RS = Conn.Execute(SQL)
End Sub
</SCRIPT>
</code>
Måste man ha include adovbs.inc i global.asa också och option explicit? Sv: Ta bort ur databas när session dör
* Hur ska man kunna logga in på anslutningen om Sessionsvariablerna är tomma?
Ur prestanda synpunkt är dett snabbare att använda ett konto för alla användare.
Alternativt ett kont för vilket rättighetsnivå du har.
* Du har inkluderat ditt skript utanför subrutinen Session_OnEnd
Du har därför inte tillgång eller instansierat ditt connection objekt.Sv: Ta bort ur databas när session dör
global.asa ser nu ut så här
<code>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnEnd
<%
Session("user")
Session("pass")
%>
<!--#include file="connect.asp"-->
Dim SQL, RS
SQL = "DELETE FROM TEMPTAB WHERE SESSION = '" & Session.SessionID & "'"
Set RS = Conn.Execute(SQL)
End Sub
</SCRIPT>
</code>Sv: Ta bort ur databas när session dör
Använd istället ett hårdkodat konto i Global.asa. Men tänk då på att lägga in en If sats vid inloggning. Så att inte användare kan logga in med systemkontot.
<code>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnEnd
Dim SQL
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=testdatabas", "sysuser", "grodlår"
Conn.Execute "DELETE FROM TEMPTAB WHERE SESSION = " & Session.SessionID
Conn.Close
Set Conn = Nothing
End Sub
</SCRIPT>
</code>
Session.SessionID är ett tal. Så du bär använda tal som fälttyp och skippa enkel fnuttarna.Sv: Ta bort ur databas när session dör
Sv: Ta bort ur databas när session dör
Du måste ha ett konto för att skapa en anslutning mot databasen. Om du inte längre har kvar användarens konto uppgifter för sessionen. Eftersom dessa är frigjorda. Kommer du att behöva ett system konto utöver det vanliga användar kontona.
För övrigt tycker jag du ska ifrågasätt valet av separata konton. Eftersom det då inte finns möjlighet till connection pooling. Sv: Ta bort ur databas när session dör
Jag har ändrat till Integer men det hjälpte inte Sv: Ta bort ur databas när session dör
Det är därför det tar längre tid att öppna din anslutning första gången. Medans det ibland går blixtsnabbt att öppna en tidigare anslutning.
Det är därför det är viktigt att så snabbt som möjligt använda close metoden på ditt connection objekt. Eftersom det gör den tillgänglig i connection pool'en. Vilket minimera antalet samtidiga anslutningar på en ASP server.
Du kommer fortfarande ha användning av det för varje enskilld användare. Dess anslutning lever ju kvar mellan sidorna. Men om alla användar skulle ha samma connection sträng. Så slipper det att ha en enskild anslutning. Utan kan använda befintliga.
Allt detta sker internt i ADO. Sv: Ta bort ur databas när session dör
Det måste väl finnas en lösning på mitt problem även med denna konfiguration?
Tack för att du atr dig tid!
/Jimmy