FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Klarade millennium-buggen
|
Jag har gjort ett referrer-script i ASP och har en ganska jobbig lösning för att filtrera bort URL:er som jag inte vill ska länkas på sajten. I dagsläget ser den ut så här:
Kod:
url = TILLFIXAD Request.ServerVariables("HTTP_REFERER") If url <> "www.sajt1.se" AND url <> "www.sajt2.se" AND url <> "www.sajt3.se" AND url <> "www.sajt4.se" AND _ url <> "www.sajt5.se" AND url <> "www.sajt6.se" AND url <> "www.sajt7.se" AND url <> "www.sajt8.se" Then MATA IN I DATABASEN Kod:
If url <> iLista Then MATA IN I DATABASEN Är det någon som har en smidig lösning på hur man kan "loopa" igenom en lista för att jämföra varje besök från en annan sajt? |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Medlem
|
Kan du inte lagra de urler du vill filtrera bort i en databas?
Det känns som den bästa lösningen. |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Känns nästan som att en array vore som den lättaste lösningen. Sen skulle jag nog kört med en InStr istället för att kolla exakt.
Typ såhär. strFilter = "www.sida1.se,www.sida2.se,www.sida3.se" arrFilter = Split(strFilter,",") For i = 0 To UBound(arrFilter) If InStr(1, url, arrFilter(i)) > 0 Then Mata in i databasen End If Next Eller kanske Utan loop, borde också funka. strFilter = "www.sida1.se,www.sida2.se,www.sida3.se" If InStr(1, strFilter, url) > 0 Then End If |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Har WN som tidsfördriv
|
Som tidigare nämns, databas vore det lämpligaste. Annars kan du använda Knallis förslag men istället för att fylla strängen strFilter direkt i koden så kan du lagra alla domäner i en textfil som du sen läser in och lagrar i strFilter. Då behöver du bara ändra i textfilen när du vill lägga till eller tabort en domän.
|
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Klarade millennium-buggen
|
Tack för era tips, jag lyckades lösa problemet såhär:
ReadTextFile.asp Kod:
<% Function ReadTextFile(strFilePath) Dim objFSO, objFile, strAllFile Set objFSO = Server.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strFilePath) strAllFile = "" If Not(objFile.AtEndOfStream) Then *strAllFile = objFile.ReadAll End If objFile.Close Set objFile = Nothing Set objFSO = Nothing strAllFile = Replace(strAllFile, Chr(13)&Chr(10), Chr(13)) strAllFile = Replace(strAllFile, Chr(10)&Chr(13), Chr(13)) ReadTextFile = Split(strAllFile, Chr(13)) End Function %> Kod:
<%referer = Request.ServerVariables("HTTP_REFERER") If referer <> "" Then Dim WordArray WordArray = Split(referer, "/") url = WordArray(2) check_visitor = Request.Cookies("visitor") If check_visitor <> "counted_for" Then <!--#include file="ReadTextFile.asp"--> *Const FILE_NAME="referrer-blocked.txt" *strFilter = ReadTextFile(Server.MapPath(FILE_NAME)) For i = 0 To UBound(strFilter) If not InStr(1, url, strFilter(i)) > 0 Then Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("databas\ref_db.mdb") Set RecSet = Server.CreateObject("ADODB.RecordSet") 'Response.Write (url) SQL = "SELECT * FROM referer WHERE url like '%"&url&"%'" RecSet.Open SQL, Conn 'uppdatbesok = RecSet("antal") + 1 * *If RecSet.EOF Then * Response.Cookies("visitor") = "counted_for" * Response.Cookies("visitor").Expires = Date() + 1 * adress = url * besok * = 1 * SQL = "Insert Into referer (url,antal) Values('" & adress & "','" & besok & "')" * Conn.Execute(SQL) *Else * Response.Cookies("visitor") = "counted_for" * Response.Cookies("visitor").Expires = Date() + 1 * datum *= date() * tid *= Time() * besok = RecSet("antal") + 1 * Conn.execute("Update referer Set antal='" & besok & "' *WHERE url='" & url & "'") *End If *Else End If Next Else End If Else End If%> |
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Supermoderator
|
Varför använder du inte databasen till allt jobb och lägger till en IN eller snarare en NOT IN sats bara?
Ett litet tips är också att indentera koden.
__________________
Jonny Zetterström se.linkedin.com/in/jonnyz | bjz.se | sajthotellet.com | kalsongkungen.se | zretail.se | zetterstromnetworks.se | webbhotellsguide.se | ekonominyheter24.se | nyamobiltelefoner.se | gapskratt.se | antivirusguiden.se | jonny.nu |
||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Klarade millennium-buggen
|
Citat:
Koden är indenterad, det är WN som tar bort alla intabbningar. Ser dock att några blanksteg finns kvar här och där. |
|||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Klarade millennium-buggen
|
Citat:
|
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Klarade millennium-buggen
|
Så här löste jag det med databas istället. Synpunkter och förbättringsförslag av koden välkomnas.
Kod:
<%referer = Request.ServerVariables("HTTP_REFERER") If referer <> "" Then Dim WordArray WordArray = Split(referer, "/") url = WordArray(2) check_visitor = Request.Cookies("visitor") If check_visitor <> "counted_for" Then Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("databasen\databasen.mdb") Set RecSet = Server.CreateObject("ADODB.RecordSet") SQL = "SELECT * FROM refererfilter WHERE url like '%"&url&"%'" RecSet.Open SQL, Conn If RecSet.EOF Then Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("databasen\ref_databasen.mdb") Set RecSet = Server.CreateObject("ADODB.RecordSet") SQL = "SELECT * FROM referer WHERE url like '%"&url&"%'" RecSet.Open SQL, Conn If RecSet.EOF Then Response.Cookies("visitor") = "counted_for" Response.Cookies("visitor").Expires = Date() + 1 adress = url besok = 1 SQL = "Insert Into referer (url,antal) Values('" & adress & "','" & besok & "')" Conn.Execute(SQL) Else Response.Cookies("visitor") = "counted_for" Response.Cookies("visitor").Expires = Date() + 1 besok = RecSet("antal") + 1 Conn.execute("Update referer Set antal='" & besok & "' WHERE url='" & url & "'") End If RecSet.Close Conn.Close Set RecSet = Nothing Set Conn = Nothing Else End If RecSet.Close Conn.Close Set RecSet = Nothing Set Conn = Nothing Else End If Else End If%> |
|||
![]() |
![]() |
Svara |
|
|