I have an application which records users visits. None of these visits are directly accessed, 100% of these visits are referred from another site.
I am passing $_SERVER['HTTP_REFERER']
through to the database. Approximately 35% of the logged entrees pass a referer, the rest are blank.
Is there a reason for this?
There are a couple of number of reasons why
HTTP_REFERER
might be blank.window.open
,window.location
and even settingtarget="_blank"
in anchors ormeta refresh
.file_get_contents
,fopen
and other similar functions in other languages will probably not set a referer request.There are probably more situations when this could happen, I'll update if I can think of anything that seems reasonable.
It is common when you are stuck finding why it is missing: - Sometime your referer is https and you are on http, it will be lost.
Otherwise: - User accessing by inputing url directly. - A user has bookmarked and come from bookmarks. - Sometime user keep the url default for browser (similar like bookmark) - Proxy surfying may remove referer. - accessing website as bots (search engine)
When linking from one document to another in Internet Explorer 4.0 and later, the Referer header will not be sent when the link is from an HTTPS page to a non-HTTPS page. The Referer header also will not be sent when the link is from a non-HTTP(S) protocol, such as file://, to another page. for more info go to this link
If a user visits your site directly, there is no referrer. It's also possible they have set it up so their browser never sends the referrer.
According to this answer, browsers do not necessarily send a referrer when doing a meta refresh.
Browsers sometimes will include the
referer
in the request. But it is not mandatory to do so (thereferer
is 100% voluntary). Indeed there are various privacy and security issues surrounding thereferer
(for example, if an HTTPS site refers you to an HTTP site, the browser should not include the referring site as thereferer
). So don't rely on it.