利用sessionStorage收集用户访问信息,然后传递给后端

这里只是简单的收集用户的停留时间、页面加载时间、当前页面URL及来源页面,以做示例

html 复制代码
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <title>测试sessionStorage存储用户访问信息</title>
    </head>
    <body>
        <button id="timer">停止</button>
        <script type="text/javascript">
        //日期+时间函数
            function formatDate(){
                let date=new Date();
                let Y=date.getFullYear()+'-';
                let M=date.getMonth()+1 < 10 ? '0'+date.getMonth()+1 : date.getMonth()+1+'-';
                let D=date.getDate() < 10 ? '0'+date.getDate()+' ' : date.getDate()+' ';
                let h=date.getHours() <10 ? '0'+date.getHours()+':':date.getHours()+':';
                let m=date.getMinutes()<10 ? '0'+date.getMinutes()+":":date.getMinutes()+":";
                let s=date.getSeconds()<10 ? '0'+date.getSeconds() : date.getSeconds();
                return Y+M+D+h+m+s;
            }
            //停留时间变量
            let timer=null,
                startTime=new Date().valueOf();//开始时间
                //页面加载完成后,收集用户信息
            document.addEventListener('DOMContentLoaded',function(){
                sessionStorage.setItem('visitedPage',window.location.href);//当前页面
                sessionStorage.setItem('referrer',document.referrer);//访问来源
                sessionStorage.setItem('visitTime',formatDate());//访问的日期和时间
                //计时变量
                let seconds=0;
                timer=setInterval(function(){
                    seconds++;
                    sessionStorage.setItem('timerDisplay',seconds);//停留时间,每秒种seconds增加1
                },1000);
                
            });
            
            //这里是以点击按钮,然后把数据传递给后端;
            //现实生成过程过应该是以用户关闭页面;然后把收集数据传递给后端,用unload事件完成
            const btn=document.getElementById('timer');
            btn.addEventListener('click',function(){
                console.log(sessionStorage.getItem('timerDisplay'));
                console.log(sessionStorage.getItem('visitTime'));
                //取消停留时间变量
                clearInterval(timer);
                //将收集所有数据,存储进frondEndData对象中
                let v=sessionStorage.getItem('visitTime');
                let r=sessionStorage.getItem('referrer');
                let l=sessionStorage.getItem('loadTime');
                let d=sessionStorage.getItem('timerDisplay');
                const frontEndData={
                    visitTime:v,
                    referrer:r,
                    loadTime:l,
                    timerDisplay:d
                };
                //转换为json格式
                const frontData=JSON.stringify(frontEndData);
                const jsonHeaders=new Headers({
                    'Content-Type':'application/json'
                });
                //利用fetch传递给后端
                fetch('sessionStorage.php',{
                    method:'post',
                    body:frontData,
                    headers:jsonHeaders
                })
                .then((response)=>{
                    if(response.ok && response.status===200)
                    {
                        return response.text();
                    }
                    throw new Error('返回数据有误');
                })
                //后端返回的信息
                .then((data)=>{
                    /*
                    let result=JSON.stringify(data);
                    let res=JSON.parse(result);
                    console.log(res.msg);
                    */
                   console.log(data);
                })
                .catch(e=>{
                    console.log('连接服务器发生错误',e);
                })
                
                //将停留计时器删除
                sessionStorage.removeItem('timerDisplay');
            });

			//这里是加载完成各类要素如:CSS、图片、javascript等
			//计算加载页面共用时间;也可以用performance API里面的navigation来计算页面加载时间更精确,可以达到毫秒级
            window.addEventListener('load',function(){
                let endTime=new Date().valueOf();
                let loadTime=endTime-startTime;
                sessionStorage.setItem('loadTime',loadTime);
            });

            
            
        </script>
    </body>
</html>

后端接收文件

php 复制代码
if($_SERVER['REQUEST_METHOD']==='POST')
{
    $data=file_get_contents('php://input');
    $result=json_decode($data);
    echo $result->timerDisplay;
}
相关推荐
jump_jump9 分钟前
基于 Squoosh WASM 的浏览器端图片转换库
前端·javascript·性能优化
小二·3 小时前
前端监控体系完全指南:从错误捕获到用户行为分析(Vue 3 + Sentry + Web Vitals)
前端·vue.js·sentry
阿珊和她的猫4 小时前
IIFE:JavaScript 中的立即调用函数表达式
开发语言·javascript·状态模式
阿珊和她的猫4 小时前
`require` 与 `import` 的区别剖析
前端·webpack
智商偏低5 小时前
JSEncrypt
javascript
谎言西西里5 小时前
零基础 Coze + 前端 Vue3 边玩边开发:宠物冰球运动员生成器
前端·coze
努力的小郑5 小时前
2025年度总结:当我在 Cursor 里敲下 Tab 的那一刻,我知道时代变了
前端·后端·ai编程
GIS之路5 小时前
GDAL 实现数据空间查询
前端
OEC小胖胖5 小时前
01|从 Monorepo 到发布产物:React 仓库全景与构建链路
前端·react.js·前端框架
2501_944711436 小时前
构建 React Todo 应用:组件通信与状态管理的最佳实践
前端·javascript·react.js