最近浏览记录

 

 

摘抄:

 

 

public partial class 商品的页面: System.Web.UI.Page
{
    List<string> list;   
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {

            // 这里是浏览商品的页面的Load
            // 会话Session["track"]里边记录的是浏览过的东西,是个List,
            // 如果商品名称唯一,可以用List<string>,记录商品的名称.
            // 也可以用数值List<int>记录商品的ID,或者List<string>记录商品的ID数字串
            string str = "这是我现在浏览的商品名称"; // 这里你要从数据库获取此商品的名称或ID
            List<string> list;
            if (Session["track"] == null)
            {
                // 新会话(第一次或以前的超时),创建新list的实例.
                // 在配置文件中,<sessionState  timeout="30" 设置超时数,这里是间隔30分钟不访问,会话丢失.
                list = new List<string>();
            }
            else
            {
                // 会话存在,准备读取会话中的数据.
                list = (List<string>)Session["track"];
            }

            if (list.Contains(str))
                list.Remove(str);    // 如果这次浏览的商品在浏览记录中,删除后重新添加进去,保持浏览顺序
            if (list.Count == 10)
                list.RemoveAt(0);    // 浏览记录保存10个,到了10个删除最老的一个记录.
            list.Add(str);           // 浏览顺序为list[9] list[8].....list[1] list[0]
            Session["track"] = list;    // 把list更新到Session 
            

            ///
            for (int i = list.Count - 1; i >= 0; i--)
            {
                string  name =  list[i]; 
                // 在这里处理浏览记录,倒着读list,然后转成超链接,你也可以显示出这个物品的图片信息等,显示到网页中.
               
            }
            this.list = list;// 或者,你把list值保存到页面类的自定义属性里边,在其它地方处理.
        }

.
.
.
.
.
.

}

默认情况下,session是作为cookie方式保存的.
    <sessionState mode="[Off|InProc|StateServer|SQLServer|Custom]"
    
    InProc 模式(默认),此模式将会话状态存储在 Web 服务器上的内存中。 这是默认值。关了浏览器就丢失了

    StateServer 模式,此模式将会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。 这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。

    SQLServer 模式将会话状态存储到一个 SQL Server 数据库中。 这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。

    Custom 模式,此模式允许您指定自定义存储提供程序。 

    如果你想要记录在客户端在关闭浏览器或以后上线还可存在,就要用StateServer和SQLServer模式.前者需要服务器启动状态服务(安装.net时带的一个组件),后者要求你的网站的数据库是asp.net自己配置的那个ASPNETDB.MDF文件.



使用cookie方法也差不多,cookie只能保存单个字符串,不能做为list保存,还有,需要自己手动管理超时时间.
    另外,cookie是从Request.Cookies读取数据,从Response.Cookies保存数据.


把if (Session["track"] == null)
    换成if (Request.Cookies["track"] == null)

把list = (List<string>)Session["track"];
    换成list = new List<string>();
        list.Add( Request.Cookies["track"]["0"]);
        .......
        list.Add( Request.Cookies["track"]["9"]);
    还要判断Request.Cookies["track"]["0"] 到["9"]  != null;
        

把Session["track"] = list;
    换成Request.Cookies["track"]["0"] = list[0];
         .........
        Request.Cookies["track"]["9"] = list[9];
    紧接着要Request.Cookies["track"]"].Expires = DateTime.Now.AddDays(50); //保存50天,可以直接设置时间用秒或50年.
    
麻烦,但好处是不要求数据库,不要状态服务,就可以保存数据50年.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值