Hur skriver man för att webbläsaren alltid skall hämta aktuell sida och inte använda sparade sidor? Om du menar att den inte skall använda cachning så sätter du bara expires till -1 Jag rekomenderar att du läser HTTP specifikationen om hur cach bör hanteras: Problemet kvarstår. Jag använder session för att kontrollera att man loggat in. Session login = ValLog om korrekt pass/lösen angetts. Detta funkar för det mesta. Men ibland liksom "försvinner" sessionen när man trycker mellan olika .asp sidor. och ett felmeddelande (in inloggad) texten visas. Trycker man då på shift+reload så kommer för det mesta rätt sida fram. Skitskumt. Men ibland hjälper inte detta heller. Vad göra, jag blir tokig.... jag har även en logout sida med koden jag har skummat igenom delarna med ang. cachning och förstått att det inte rekomenderas att ta bort detta. Mitt problem återstår ju dock då jag tror mitt problem ligger i att sidorna cachas, men jag kan ha fel. Utdrag: tyvärr funkade inte detta heller, tror jag provat alla lösningar som jag kan tänka mig. Det skumma problemet är att man kan få olika resulat när man uppdaterar. Visa koden för din sida. Det kan var den som ställer till det. T.ex. om den genererar ett svar och sedan loggar in dig. Här är inloggningskoden, fil login.asp (anropas första gången med counter=0) Testa om detta hjälper? Hej igen En undran: *Harklar sig* Det var jag som missat att även omge password med SQLText() funktionen. Teta om det löser ditt problem. det närmar sig.... > har kollat igenom namn på variabler, formulär, tabellnamn i DB osv. Hittar inga fel. Osäker på vad du menar med : Envis som jag är så vill jag fortfarande ha : tack saw, det löste problemet. MEN nu kan jag aldrig logga in oavsett om jag anger ett user/pass som finns i DB, test blir alltid 1. Är strängarna inte exakt lika eller varför funkar det inte nu? Jag är inte säker men titta här: fick inte joxet att funka men med att ta ut alla rader med användaren och jämföra dem mot lösenordet i en loop funkar det. Tyvärr är jag tillbaka på ruta 1. Dvs ibland funkar det med sessionen ibland inte. Ex funkar det att logga in till admin.asp, trycker man uppdatera 1-3 ggr så kommer meddelandet att man inte är inloggad, uppdatera igen och det funkar osv. saw: SQLText funktionen lägger till egna citattecken ok, bortsett från teknaliteter i hur man bäst skriver SQL satsen så återstår problemet med sessions, någon idé. jag har hittat felet men inte löst det. När jag plockar bort raden Om du tar bort den så måste du ändra: Du kan istället använda: det hjälpte inte tyvärr. Verkar en aningen bättre men funkar inte riktigt ändå. Det är ärligt talat många som faktiskt rekommenderar att man skiter i adovbs.inc filen. Tar bara upp massa plats..."tvingad" uppdatering av en sida
Sv: "tvingad" uppdatering av en sida
<%response.Expires=-1%>Sv: "tvingad" uppdatering av en sida
http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13
Om du har fråger, efter du läst avsnittet om cachning i HTTP specifikationen, är du välkeom tillbaks med dem.
Om du skulle känna dig osäker på hur tillämpa HTTP specifikationen på din ASP sida, kan du bifoga din kod och så långt du kommit. Så hjälper jag dig gärna sista biten.
Att något fungerar betyder inte at det är rätt sätt att göra det. Därför tycker jag man bör ta reda på hur man skall utföra det.
Då är specifikationer ett bra hjälpmedel. I detta fallet HTTP specifikationen. Då dokument i webläsaren bör cachas enligt den. Sv: "tvingad" uppdatering av en sida
<%response.Expires=-1%>
<% Response.Buffer = True
If session("login") = "ValLog" Then %>
<!-- #include virtual="adovbs.inc" -->
kod som skall visas om användaren inloggad, ligger här
<% else %>
<font class="text-bold">
To be able to view this page you must log in.
<br></font>
<br>:: To login page
<br>
<% End If %>Sv: "tvingad" uppdatering av en sida
<% Session.Abandon %>
vilket inte verkar döda sessionen korrekt. för skriver man in url:en för en skyddad sida så kommer ett felmeddelande upp. Trycker man då på shift+reload ett par gånger så kommer man åt sidan.
..
Sv: "tvingad" uppdatering av en sida
Sv: "tvingad" uppdatering av en sida
Cache-Control: no-cache
to force any intermediate caches to obtain a new copy from the origin server.
Vilket kan demonstreras med följande ASP kod:
<code>
<%@ Language = "VBScript" %><%
Option Explicit
Response.Buffer = True
Response.AddHeader "Cache-Control", "no-cache"
%>
<html>
<head>
<meta HTTP-EQUIV="Content-Type" Content="text-html; charset=Windows-1252">
<title id=titletext>ASP Page</title>
</head>
<body bgcolor=white>
<p><%=Now()%></p>
</body>
</html>
</code>Sv: "tvingad" uppdatering av en sida
ex, första gången jag går till en sida efter jag är inloggad så kommer ett felmeddelande (inte inloggad) trycker jag då på shift+reload så kommer rätt sida, shift+reoload igen så kan felmeddelandet komma tillbaka, och så håller det på.
Har jag dödat sessionen så kommer felmeddelandet upp men shift+reload kan visa sidan. Vad är det som strular???? Det verkar inte finnas någon logik i det hela.Sv: "tvingad" uppdatering av en sida
Sv: "tvingad" uppdatering av en sida
<code>
<%@ Language = "VBScript" %>
<% Response.Buffer = True
Response.AddHeader "Cache-Control", "no-cache"
%>
<html>
<head>
<title>log in page</title>
</head>
<body bgcolor="#FEFDF0" class="scroll">
<% Response.Buffer = True %>
<!--#include virtual="adovbs.inc" -->
<% dim logi
logi = "no"
if session("login")= "ValLog" and request.querystring("counter") = "0" then
response.redirect "admin.asp"
else
'=========================================================================
' Kolla om usr / pass stämmer mot databasen
'=========================================================================
if request.querystring("what") = "check" then
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("sibc_db.mdb")&";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
poster = "select * from tblUsers where username = '"& request.form("usrname") &"'"
RecSet.Open poster, Con, adOpenStatic, adLockOptimistic
Do Until RecSet.EOF
dim usr
usr = RecSet("username")
pass = RecSet("password")
if usr = request.form("usrname") then
if pass = request.form("passw") then
logi = "yes"
exit do
end if
end if
RecSet.MoveNext
Loop
Session("login") = "failLog"
RecSet.Close
con.close %>
<% end if %>
<%
'=========================================================================
' om inloggad skicka vidare
'=========================================================================
%>
<% if logi = "yes" then
Session("login") = "ValLog"
response.redirect "admin.asp"
end if
if session("login")= "failLog" then %>
<font>Error!
<br>Either your username or password
<br>is wrong.
<% end if %>
<%
'=========================================================================
' Formulär för att skriva in usr / pass
'=========================================================================
%>
<form method="post" name="formen" action="login.asp?what=check&counter=1">
<font class="text-bold"><br>Username:<br></font>
<input type="text" name="usrname" size="20">
<font class="text-bold"><br><br>Password<br></font>
<input type="password" name="passw" size="20">
<br><br><input type="submit" value="Log in" name="Btn">
</form>
<% End If %>
</body>
</html>
</code>
admin.asp ser ut såhär:
<code
<body>
<% Response.Buffer = True
If session("login") = "ValLog" Then %>
<br><font class="text-bold">Just nu kan du administrera följande sida:</font>
<br>
<br>Kommande
logg out
<% else %>
<font class="text-bold">
To be able to view this page you must log in.
<% End If %>
</body>
</html>
</code>Sv: "tvingad" uppdatering av en sida
<code>
<%@ Language = "VBScript" %><%
Option Explicit
Sub WriteHead(Title)
Response.Write "<html>"
Response.Write "<head>
Response.Write "<title>" & Server.HTMLEncode(Title) & "</title>"
Response.Write "</head>"
Response.Write "<body bgcolor=""#FEFDF0"" class=""scroll"">"
End Sub
Sub WriteFoot()
Response.Write "</body>"
Response.Write "</html>"
End Sub
Function SQLText(Value)
If Len(Value) Then
SQLText = """" & Replace(Value, """", """""") & """"
Else
SQLText = "Null"
End If
End Function
Dim Con
Dim RecSet
Dim Succeful
Dim strSQL
Dim strPassword
Dim strUserName
Response.Buffer = True
Response.AddHeader "Cache-Control", "no-cache"
If session("login") = "ValLog" And Request.Querystring("counter") = "0" Then
response.redirect "admin.asp"
Else
strUserName = Trim(Request.Form("usrname"))
strPassword = Trim(Request.Form("passw"))
'**
'* Kolla om usr / pass stämmer mot databasen
'**
If request.querystring("what") = "check" then
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("sibc_db.mdb")&";"
strSQL = "SELECT *" & vbCrLf & _
"FROM tblUsers"
"WHERE username = " & SQLText(strUserName) & " AND = " & SQLText(strPassword)
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open poster, Con
If RecSet.EOF Then
Succeful = False
Session("login") = "failLog"
Else
Succeful = True
Session("login") = "ValLog"
End If
RecSet.Close
Set RecSet = Nothing
con.close
Set con = Nothing
End if
End if
'**
'* om inloggad skicka vidare
'**
If Succeful then
response.redirect "admin.asp"
Else
WriteHead "Login"
%>
<font>Error!
<br>Either your username or passwordis wrong.
<%
End if
'**
'* Formulär för att skriva in usr / pass
'**
%>
<form method="post" name="formen" action="login.asp?what=check&counter=1">
<font class="text-bold"><br>Username:<br></font>
<input type="text" name="usrname" size="20">
<font class="text-bold"><br><br>Password<br></font>
<input type="password" name="passw" size="20">
<br><br><input type="submit" value="Log in" name="Btn">
</form>
<%
WriteFoot
End If
%>
</code>
admin.asp ser ut såhär:
<code>
<%@ Language = "VBScript" %><%
Option Explicit
Sub WriteHead(Title)
Response.Write "<html>"
Response.Write "<head>
Response.Write "<title>" & Server.HTMLEncode(Title) & "</title>"
Response.Write "</head>"
Response.Write "<body bgcolor=""#FEFDF0"" class=""scroll"">"
End Sub
Sub WriteFoot()
Response.Write "</body>"
Response.Write "</html>"
End Sub
Response.Buffer = True
Response.AddHeader "Cache-Control", "no-cache"
WriteHead
If session("login") = "ValLog" Then
%>
<br><font class="text-bold">Just nu kan du administrera följande sida:</font>
<br>
<br>Kommande
logg out
<%
Else
%>
<font class="text-bold">
To be able to view this page you must log in.
<%
End If
WriteFoot
%>
</code>Sv: "tvingad" uppdatering av en sida
Har satt in din kod och testat som en galning, får det inte att funka. Min SQL rad ballar ur
<code>
strSQL = "SELECT *" & vbCrLf & "FROM tblUsers WHERE username = '" & SQLText(request.form("usrname")) & " AND password = " & request.form("passw")
</code>
Trycker man på login knappen får man följande fel:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in string in query expression 'username = 'Null AND password ='.
/login.asp, line 56
Vad kan vara fel, tycker jag har provat ALLT (utom det rätta då förståss)Sv: "tvingad" uppdatering av en sida
<code>
AND password = " & request.form("passw")
</code>
Borde väll vara
<code>
AND password = '" & request.form("passw") & "'"
</code>
eller???Sv: "tvingad" uppdatering av en sida
Sv: "tvingad" uppdatering av en sida
om man lämnar formuläret tomt och trycker login funkar det. Skriver man i någonting får man följande felmeddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
/login.asp, line 56
min sql sats ser ut enl:
<code>
strSQL = "SELECT *" & vbCrLf & "FROM tblUsers WHERE username = " & SQLText(request.form("usrname")) & " AND password = " & SQLText(request.form("passw"))
</code>
SQLText är: (kanske där felet ligger? Fattar inte rikgit vad den gör och syftet med den...)
<code>
Function SQLText(Value)
If Len(Value) Then
SQLText = """" & Replace(Value, """", """""") & """"
Else
SQLText = "Null"
End If
end function
</code>Sv: "tvingad" uppdatering av en sida
> Too few parameters. Expected 1.
>
Detta felmedelande tyder på att ett av dina fältnamn är felstavade eller at en sträng tolkas som ett fältnamn och därför saknas.
Ta resultatet av strSQL och testa den i access så får du snabbt redan på vilken parameter den söker.Sv: "tvingad" uppdatering av en sida
> Ta resultatet av strSQL och testa den i access så får du snabbt redan på vilken parameter den söker.Sv: "tvingad" uppdatering av en sida
<code>
strSQL = "SELECT *" & vbCrLf & "FROM tblUsers WHERE username = '" & SQLText(request.form("usrname")) & "' AND password = '" & SQLText(request.form("passw"))"'"
</code>
to few parameters inebär ju att du inte har något värde med dig.
<code>
Om du har ett tal så skall du omge din variabel med " & variabel & "
Har du därimot en sträng(string) så MÅSTE du ha med '(en enkelfnutt) '" & variabel & "'"
</code>
Funktionen som Andreas gav dig skall du INTE ändra på, den fungerar.Sv: "tvingad" uppdatering av en sida
<code>
strSQL = "SELECT *" & vbCrLf & "FROM tblUsers WHERE username = '" & SQLText(StrUserName) & "' AND password = '" & SQLText(StrPassword) & "'"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open strSQL, Con
If RecSet.EOF Then
Succeful = False
Session("login") = "failLog"
test = 1
Else
Succeful = True
Session("login") = "ValLog"
test = 2
End If
</code>Sv: "tvingad" uppdatering av en sida
<code>
strSQL = "SELECT *" & vbCrLf & "FROM tblUsers WHERE username = '" & SQLText(StrUserName) & "' AND password = '" & SQLText(StrPassword) & "'"
</code>
detta blir ju samma som:
<code>
strSQL = "SELECT *"
"FROM tblUsers WHERE username = '" & SQLText(StrUserName) & "' AND password = '" & SQLText(StrPassword) & "'"
</code>
eller:
<code>
strSQL = "SELECT *FROM tblUsers WHERE username = '" & SQLText(StrUserName) & "' AND password = '" & SQLText(StrPassword) & "'"
</code>
Jag skulle nog chansa på att det fattas ett mellanslag här:
<code>
strSQL = "SELECT * FROM tblUsers WHERE username = '" & SQLText(StrUserName) & "' AND password = '" & SQLText(StrPassword) & "'"
</code>
Sen när vi ändå håller på, din SQL blir mycket effektivare om du bara plocka ut de fält som du behöver så istället för att skriva:
<code>
strSQL = "SELECT * FROM tblUsers WHERE username = '" & SQLText(StrUserName) & "' AND password = '" & SQLText(StrPassword) & "'"
</code>
..är det bättre att skriva:
<code>
strSQL = "SELECT StrUserName,password FROM tblUsers WHERE username = '" & SQLText(StrUserName) & "' AND password = '" & SQLText(StrPassword) & "'"
</code>
...eller?Sv: "tvingad" uppdatering av en sida
<code>
poster = "select * from tblUsers where username = '"& request.form("usrname") &"'"
RecSet.Open poster, Con, adOpenStatic, adLockOptimistic
dim usr
Do Until RecSet.EOF
usr = RecSet("username")
pass = RecSet("password")
if usr = request.form("usrname") then
if pass = request.form("passw") then
successful = True
exit do
end if
end if
RecSet.MoveNext
Loop
sucessful = False
Session("login") = "failLog"
</code>
och längre ned i koden
<code>
If Succeful then
response.redirect "admin.asp"
Else
... felmeddelande
</code>Sv: "tvingad" uppdatering av en sida
<code>
SQLText = """" & Replace(Value, """", """""") & """"
</code>
Du skall därför inte omge värdet med enkla citattecken. Då åsidosätter du säkerheten SQLTextfunktionen ger mot SQL inject:
<code>
strText = SQLText("Don't ""mess"" with me!")
</code>
Ger sträng värdet:
<code>
strText = ""
</code>
Vilket infogas i en SQL sats:
<code>
strSQL = "INSERT INTO tblMessages (MessageText) (" & strText & ")"
</code>
Ger sträng värdet:
<code>
strSQL = "INSERT INTO tblMessages (MessageText)" & vbCrLf & "VALUES (""Don't """"mess"""" with me!"")"
'INSERT INTO tblMessages (MessageText)
'VALUES ("Don't ""mess"" with me!")
</code>
Om du då använder dig av enkla citattecken blir det fel:
<code>
strSQL = "INSERT INTO tblMessages (MessageText) ('" & strText & "')"
</code>
Ger sträng värdet:
<code>
strSQL = "INSERT INTO tblMessages (MessageText)" & vbCrLf & "VALUES ('""Don't """"mess"""" with me!"")'"
'INSERT INTO tblMessages (MessageText)
'VALUES ('"Don't ""mess"" with me!"')
</code>
Eftersom SQL kommer tolka strängen som avslutad efter "Don'".
Du bör ifråga sätta SQLText() funktionen. Den kan ge problem. Inget är perfekt. MAn kan ju skriva om den till att använda enkal citatecken:
<code>
Function SQLText(Value)
If Len(Value) Then
SQLText = "'" & Replace(Value, "'", "''") & "'"
Else
SQLText = "Null"
End If
End Function
</code>
Oavsett om SQLText arbetar med enkla (') eller dubla (") cittattecken så skall värdet i SQL satsen aldrig omges med någat av dem. Det hanterar SQLText funktionen.Sv: "tvingad" uppdatering av en sida
Tacksam för någon idé att testa.Sv: "tvingad" uppdatering av en sida
<code>
<!-- #include virtual="adovbs.inc" -->
</code>
så funkar det perfekt (inte sql satser osv förståss) med att gå mellan olika sidor osv. Men så fort jag sätter dit include-raden så slutar det att funka.
Nu vet jag inte hur jag skall kunna skriva det hela så att jag får med include-raden och att det funkar, någon idé.Sv: "tvingad" uppdatering av en sida
<code>
RecSet.Open poster, Con, adOpenStatic, adLockOptimistic
</code>
till
<code>
RecSet.Open poster, Con, 3, 3
</code>
Du kan ju se om det hjälper.....tror kanske inte det förstås! Sv: "tvingad" uppdatering av en sida
<code>
<!--METADATA type="typelib" NAME="ADODB Type Library" UUID="00000205-0000-0010-8000-00AA006D2EA4" -->
</code>Sv: "tvingad" uppdatering av en sida
Sv: "tvingad" uppdatering av en sida
//Tobbe\\ www.aljapaco.com