日期:2014-05-18  浏览次数:20998 次

网站如何记录和显示用户浏览过的资源记录
asp.net c#
我需要完成的功能如下
1、当用户进入网站浏览资源时,记录下用户浏览过的资源
2、当用户下次再到网站浏览资源时,显示出用户上次访问浏览过的资源记录
高手请解,如何实现上述功能,另外大家觉得用什么介质存储用户浏览记录好,是cookie,还是数据库;当然,本人希望有人能告诉我有没有第三种更好的选择

------解决方案--------------------
当然是数据库好,用户有可能禁用Cookie或者清理掉Cookies
提供一种思路,定义一个ViewTimes结构,保存各个页面(资源)的浏览情况,将此结构序列化为字节存进数组,为了提升性能,可以在Application_EndRequest事件中一次性写入数据库,并在Application_BeginRequest事件中初始化上面的结构(从数据库读取),甚至可以定义在MembershipProvider验证的时候一并读取数据,并自定义一个实现接口IPrincipal的类存放ViewTimes结构,可以跟Name等属性一并读取,是不错的思路
C# code

[Serializable]
    struct ViewTimes
    {
        public int DefaultAspx;
        public int GameAspx;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.User.Identity.IsAuthenticated)//是否通过验证
        {
            //获取用户名
            string name = this.User.Identity.Name;
            ViewTimes vt = new ViewTimes();
            vt.DefaultAspx = 1;//给结构赋值,表示读取了资源
            vt.GameAspx = 2;
            BinaryFormatter bs = new BinaryFormatter();
            MemoryStream ms = new MemoryStream();
            bs.Serialize(ms, vt);//序列化为字节流
            byte[] buffer = ms.ToArray();转换为字节数组,此数组对应数据库Image格式字段
            //insert into data(viewtimes) values(buffer)更新数据库
        }
    }

------解决方案--------------------
自定义模块加入,用此模块截获所有用户请求信息分析其URL,有效就++,无效就不处理,这样不用在每个页面加函数了,不用的时候在配置文件中取消模块注册就实行功能的卸载了