PaulW 
Member 
 
Registered: 26th Jan 03
 Location: Atherton, Greater Manchester 
User status: Offline 
 
 | 
 
I'm trying to log reffering urls to a site I have to look out for, but it only seems to catch them if the referer is from the same window (ie like if you click a link from google), but if its a site which opens links in a new window (like when you click a link on a post here, it opens a new window) it won't catch the referer. 
 
I'm guessing its because its a new window, it doesnt tag it maybe... 
 
I'm using this method to get the referer... 
 
Request.ServerVariables("HTTP_REFERER") 
 
Any other ideas?
 | 
PaulW 
Member 
 
Registered: 26th Jan 03
 Location: Atherton, Greater Manchester 
User status: Offline 
 
 | 
 
Thought I best include the whole code... 
 
code: <% 
Dim blnValidEntry 
 
blnValidEntry = True 
 
If not IsEmpty(Session("LogIn")) then blnValidEntry = False 
 
If Left(Request.ServerVariables("HTTP_REFERER"), 31)="http://stnicholas-school.org.uk" Then 
	blnValidEntry = False 
End If 
 
If Left(Request.ServerVariables("HTTP_REFERER"), 35)="http://www.stnicholas-school.org.uk" Then 
	blnValidEntry = False 
End If 
 
If Request.ServerVariables("HTTP_REFERER") = "" Then 
	blnValidEntry = False 
End If 
 
If blnValidEntry Then 
	Const ForAppending = 8 
	Const Create = True 
	Dim FSO 
	Dim TS 
	Dim LogFileName 
	Dim strLog 
	 
	LogFileName = Server.MapPath("logs\referers.htm") 
	 
	Set FSO = Server.CreateObject("Scripting.FileSystemObject") 
	Set TS = FSO.OpenTextFile(LogFileName, ForAppending, Create) 
	strlog = "<table width=""100%""  border=""1"" cellspacing=""0"">" 
	strlog = strlog & "<tr>" 
	strlog = strlog & "<td width=""20%"" class=""style5"">" & NOW() & "</td>" 
	strlog = strlog & "<td width=""20%"" class=""style5"">" & Request.ServerVariables("URL") & "?" & Request.ServerVariables("QUERY_STRING") & "</td>" 
	strlog = strlog & "<td width=""20%"" class=""style5""><a href=""" & Request.ServerVariables("HTTP_REFERER") & """ target=""_blank"">" & Request.ServerVariables("HTTP_REFERER") & "</a></td>" 
	strlog = strlog & "<td width=""40%"" class=""style1 style4"">" & Request.ServerVariables("HTTP_USER_AGENT") & "</td>" 
	strlog = strlog & "</tr></table>" 
	 
	TS.write strlog 
	TS.Writeline "" 
	 
	Session("LogIn") = "yes" 
	Set TS = Nothing 
	Set FSO = Nothing 
	 
End If 
%> 
   
 | 
Dom 
Member 
 
Registered: 13th Sep 03
 
User status: Offline 
 
 | 
 
no, when a new window is opened, there isnt a referer heading   Only way to do it mate, if you want to log where there from is by IP address, then do a DNS on them and do it that way   Atleast you will know what ISP there using, but thats about it mate  
 | 
PaulW 
Member 
 
Registered: 26th Jan 03
 Location: Atherton, Greater Manchester 
User status: Offline 
 
 | 
 
aye I'm already getting that via the normal web-logs, its I was just asked to get this info by the head as he wants to know who is linking to us... 
 
bugger  
 | 
Ian 
Site Administrator
 
Registered: 28th Aug 99
 Location: Liverpool 
User status: Offline 
 
 | 
 
Impossible - if the browser isn't providing this variable then you've no way of forcing it to be there.  I'm sure some of the more obscure browsers can be configurered to turn it off as well - you'd never see it from these.
 | 
Ian 
Site Administrator
 
Registered: 28th Aug 99
 Location: Liverpool 
User status: Offline 
 
 | 
 
Also, why are you logging HTML tags!? 
 
Either write them to a db or csv or something, then write a script to traverse the data and make you a page.  Anything else gives you huge web pages very quickly.
 | 
Dom 
Member 
 
Registered: 13th Sep 03
 
User status: Offline 
 
 | 
 
put it in anyways mate and tell the head that its impossible etc   
 
Also, btw mate, that code can be written alot simpler, by doing: 
 
code:
  
<% 
Dim strReferer 
strReferer = Request.ServerVariables("HTTP_REFERER") 
 
If strReferer <> "http://stnicholas-school.org.uk" or strReferer <> "http://www.stnicholas-school.org.uk" or strReferer <> "" or not IsEmpty(Session("LogIn")) then 
	Const ForAppending = 8 
	Const Create = True 
	Dim FSO 
	Dim TS 
	Dim strLog 
 
	Set FSO = Server.CreateObject("Scripting.FileSystemObject") 
	Set TS = FSO.OpenTextFile(Server.MapPath("logs\referers.htm"), ForAppending, Create) 
	strlog = "<table width=""100%""  border=""1"" cellspacing=""0"">" 
	strlog = strlog & "<tr>" 
	strlog = strlog & "<td width=""20%"" class=""style5"">" & NOW() & "</td>" 
	strlog = strlog & "<td width=""20%"" class=""style5"">" & Request.ServerVariables("URL") & "?" & Request.ServerVariables("QUERY_STRING") & "</td>" 
	strlog = strlog & "<td width=""20%"" class=""style5""><a href=""" & Request.ServerVariables("HTTP_REFERER") & """ target=""_blank"">" & Request.ServerVariables("HTTP_REFERER") & "</a></td>" 
	strlog = strlog & "<td width=""40%"" class=""style1 style4"">" & Request.ServerVariables("HTTP_USER_AGENT") & "</td>" 
	strlog = strlog & "</tr></table>" 
	 
	TS.write strlog 
	TS.Writeline "" 
	 
	Session("LogIn") = "yes" 
	Set TS = Nothing 
	Set FSO = Nothing 
	 
End If 
%> 
  
  
 
although im not sure how many "or" statments you can use   so it might not work, but im 90% sure that the way i just chopped it, it will   
 | 
Dom 
Member 
 
Registered: 13th Sep 03
 
User status: Offline 
 
 | 
 
quote: Originally posted by Ian 
Also, why are you logging HTML tags!? 
 
Either write them to a db or csv or something, then write a script to traverse the data and make you a page.  Anything else gives you huge web pages very quickly. 
   
 
its probably because it nice and easy mate   Although yea, i agree, loading a 10+mb html page isnt the nicest thing in the world   
TBH, there are loads of ways to do it, like dumping the data into a db etc But then you could add a part where it will compare the sent HTTP_REFERER head to whats in the database (storage solution) then if it isnt in the db then it will add it, otherwise it will increase a value next to the already existing HTTP_REFERER website string. But then you start to write a full blown website logger and if thats the case you might as well just download a freebie logger...plenty of them and will offer loads more info  
 | 
Ian 
Site Administrator
 
Registered: 28th Aug 99
 Location: Liverpool 
User status: Offline 
 
 | 
 
I wouldn't check what's already in there on the write. 
 
Just log the line, the use a grouping query to do the counting. That's how the post distribution thing in your profile works, group by forum and order by the count, descending.  There's also a bit of maths in there to divide the count figure by post total and give percentage but the SQL is identical. 
 
But yeah, if you're going to go those lenths....  
 |