如何获取url访问历史记录

摘要:
所以我找到了文档Referrer,这可以获得页面的上一个URL,所以我只需要判断上一个网址是否为B]?然而,这会适得其反,因为浏览器在使用文档时无法向前或向后移动。推荐人!您可以从该表中看到文档。Referrer可以涵盖大约一半的案例。请求的标头将具有Referer属性。在接收到请求后,服务器可以提取标头中的Referer,以确定访问者从哪个页面发起请求。如果标头不包含引用,则在使用document.referre时将为其分配一个空字符串。

  在院里的群里,有人问了这么一个问题:

  A页面提交表单到B页面,然后在B页面点了后退,如果在A页面上判断是直接访问的还是后退进去的呢?我不想改B页面。

  于是乎本着热心人的想法,我就帮他搞了搞,首先我想到了window.history,不过很遗憾,其没有提供相应的属性,只是提供了向前和向后跳转的方法。于是乎我找到了document.referrer,这个可以获得页面的上一个url,这样我只要判断一下其上一个url是不是B]不就ok了吗?但是,事与愿违,因为在使用document.referrers时不支持浏览器的前进和后退!首先详细说下document.referrers,下面是网上关于document.referrer及其兼容性的总结:

一、从使用意义上来说document.referrer希望能够追踪到的是浏览器端行为。如果一张页面A被打开,那么浏览器端可能会发生的动作有用户操作、JS代码两种。先来看看用户打开页面A可能会进行的操作:

1直接在地址栏中输入A的地址
2从B页面左击link A,跳转至A页面
3从B页面右击link A,在新窗口中打开
4从B页面右击link A,在新标签页中打开
5拖动link A至地址栏
6拖动link A至标签栏
7使用浏览器的前进、后退按钮

注意这里的link即指<A>标签,但是如果有事件或者target还要另当别论。

JS打开页面可能的方式:

1修改window.location
2使用window.open
3点击flash

上面列出了客户端打开页面的一些方法,此外,如果通过服务端的重定向技术,也能够使得页面A呈现给访客。

下面来针对具体的浏览器测试,如果是上述的这些情况,document.referrer表现如何:

序号场景IE8.0FF3.6FF4.0chrome
1直接在地址栏中输入A的地址" "" "" "" "
2从B页面左击link A,A页面替换B页面(target='_self')
3从B页面左击link A,A在新窗口中打开(target='_blank')
3从B页面右击link A,在新窗口中打开" "
4从B页面右击link A,在新标签页中打开" "
5鼠标拖动link A至地址栏" "" "" "
6鼠标拖动link A至标签栏" "" "" "" "
7使用浏览器的前进、后退按钮保持保持保持保持
8修改window.location打开A页面(同域)" "
9使用window.open打开A页面" "
10点击flash打开A页面    
11服务器重定向至A页面" "" "" "" "

其中," "表示一个空的字符串,√表示能够正确判断来源页,保持则意味使用前进后退不会改变页面的referrer。从这张表里可以看出document.referrer能覆盖大约一半的case。但是对于一些比较常用的操作,例如利用鼠标拖动link至标签栏、前进后退等情况还不能做出正确的处理。

二、document.referrer的来源

浏览器在向server请求页面A的时候,会发送HTTP请求。这个请求的Header里会带上Referer属性,server接收到该请求后,可以提取出Header里的Referer,用于判断访客是从哪个页面发起的请求。

如何获取url访问历史记录第1张

一般情况下浏览器请求A时发送的Header中Referer是什么,那么拿到A页面后document.referre的值就是什么。上图是一个请求A页面的Header,A的document.referre为http://localhost/Test/b.html。
 
如果在Header中不包含Referre,那么用document.referre去取的时候,就会被赋值为空字符串。

三、关于HTTPS请求

如果在一张普通的HTTP页面上点击了HTTPS的链接,那么在https请求头部可以附上Referer信息,之后在HTTPS页面中依然可以用document.referre来获得普通的http页面。
 
同样,如果是在一张https页面上点击了另一个HTTPS的链接,可以在请求的头部附上Referer信息。
 
但是如果是从一张https页面点击了http链接,那么很不幸,发送的http请求头里无法包含关于https页面的信息,这可能是出于一种对https页面的保护措施。

   所以,使用document.referrer也不行,那么怎么办呢?

  这是我的两个思路:

1、用session存储一个额外的变量用来判断是否用户是由b后退到了a。

2、拒绝页面的缓存,因为document.referer无法再前进后退时起作用,就是缓存惹得祸。不过未验证,我要验证下再说。暂时到这里。

免责声明:文章转载自《如何获取url访问历史记录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ESP8266恢复出厂设置Geode/Gemfire学习笔记(一)环境搭建、快速上手下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

https证书设置以及设置301跳转

https证书设置以及设置301跳转 1、在Nginx的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。 2、打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到: HTTPS server server { listen 443; server_name localhost; ssl on; ss...

mysql-community-server-5.7.24 &amp;amp; 5.7.31 (5.6.35 升级到 5.7.24)

阶段1: rpm -qa | grep mysql wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.24-1.el6.x86_64.rpm-bundle.tar wget https://cdn.mysql.com/archives/mysql-5.7/mysql-community-serv...

QT5.1 调用https

以VS开发为例。因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1、首先打开http://slproweb.com/products/Win32OpenSSL.html网页; 2、下载安装包,我下载的是:Win32 OpenSSL v1.0.1c Light安装包,随着时...

NX二次开发-Ufun C函数例子目录【更新日期2020.7.5】

外部开发模式exe(不打开NX进行后台操作)以及封装exe传参调用 https://www.cnblogs.com/nxopen2018/p/12386103.html 图为张弛每天幻想开车 飞驰人生-张弛一段很励志的话:当拉力赛车在我身边呼啸而过,我知道!这将是我的一生热爱,我将为此一直奋斗! UF公共类型 1 UF_beg...

Java访问SSL地址,免验证证书方式

1 packagecom.lenovo.biportal.utils.bitool; 2 3 importjavax.net.ssl.HostnameVerifier; 4 importjavax.net.ssl.HttpsURLConnection; 5 importjavax.net.ssl.SSLContext; 6 importjavax.net...

STM32 SWD下载口无法下载的原因和解决办法

1.SWD的下载口在程序中被禁用,IO口被设置为普通IO口 2.芯片被锁,原因有可能是程序执行了不正确的访问导致芯片被锁 3.供电不正常 4.SWD烧了 解锁原因: 在下载程序的时候有时候会发生错误导致内核停止工作,这就意味着内核被锁,这时候已经无法把程序下载进去了。 解决的办法就是用ISP方式下载程序进去冲刷一遍,然后就好用了。 除非使能了读保护,不...