大概思路有两种:
1。 就是每个页往前推 document.referrer
如果页面少的话还可以。页面多的话根本不现实。而且很乱!
2。用cookie
首先在没个页面里 设置一段代码。就是去抓前一个页的地址,并且保存到cookie里。保存cookie 用单件模式。也就是只能保存一次。如果保存过了就不在保存。 cookie 过期时间设置为跟进程同步周期。 也就是关闭IE cookie消失。这样就能保证是获取的是来本站点前的页面了。
然后到特定页面在去提取cookie。并保存到数据库中,就可以保存特定页面的来源信息了。
在页脚 文件中插入如下代码:
<div style="display:none
<script language="javascript" type="text/javascript">
var url = "http://域名/OriginPage/sc.aspx?referrer="+ escape(document.referrer);
window.document.write("<script src=/'"+url+"/'><//script>");
</script>
</div>
sc.aspx代码如下:
public string referrer = "";
protected void Page_Load(object sender, EventArgs e)
{
referrer = DAL.Handler.Request("referrer", DAL.GetTypeEnum.QueryAndPost, DAL.CheckGetEnum.Safety).ToString(); //获取脚本传过来的参数
//先提取cookie
HttpCookie cookie = IgoCMS.Web.Cookie.Get(DAL.Model.CookieforOrigin.OriginCookie);
if (cookie != null)
{
// IsSet 这项是判断cookie是否已经写过的属性
bool isset = Convert.ToBoolean(cookie[DAL.Model.CookieforOrigin.IsSet]);
if (!isset)
{
//保存cookie
HttpCookie cookie1 = new HttpCookie(DAL.Model.CookieforOrigin.OriginCookie);
cookie1[DAL.Model.CookieforOrigin.Origin] = Server.UrlEncode(referrer);
cookie1[DAL.Model.CookieforOrigin.IsSet] = "true";
cookie1.Domain = DAL.Model.CookInfo.cookieDomain;
CMS.Web.Cookies.Save(cookie1);
}
}
else
{
//保存cookie
HttpCookie cookie1 = new HttpCookie(DAL.Model.CookieforOrigin.OriginCookie);
cookie1[DAL.Model.CookieforOrigin.Origin] = referrer;
cookie1[DAL.Model.CookieforOrigin.IsSet] = "true";
cookie1.Domain = DAL.Model.CookInfo.cookieDomain;
CMS.Web.Cookies.Save(cookie1);
}
}
特定页面保存的代码
string Ref ;
HttpCookie cookie = IgoCMS.Web.Cookie.Get(DAL.Model.CookieforOrigin.OriginCookie);
if (cookie != null)
{
bool isset = Convert.ToBoolean( cookie[DAL.Model.CookieforOrigin.IsSet]);
string Referrer = cookie[DAL.Model.CookieforOrigin.Origin];
if (isset)
{
Ref = Uri.UnescapeDataString(Referrer);//设置cookie里保存的来源
}
}
else
{
Ref = Furl;;//设置本页前一页的地址
}
Ref = Furl;
然后把 Ref 保存到库里就可以了。
后台显示页面:
public string ReturnUrl( object str1)
{
string str = "";
if (str1 == null)
{
return "";
}
str = str1.ToString().ToLower();
string strEncoding = "gb2312";
Encoding encode = Encoding.Default;
if (str.IndexOf("google") > -1 || str.IndexOf("yahoo") > -1 || str.IndexOf("youdao") > -1 || str.IndexOf("yisou") > -1)
{
strEncoding = "utf-8";
}
else
{
strEncoding = "gb2312";
}
encode = Encoding.GetEncoding(strEncoding);
return HttpUtility.UrlDecode(str, encode);
}