请教几个问题,回答了就给100分 1.获取访问各页面的IP2.获取各页面点击3.记录某一ip的访问页面4.记录访问途径(如:由百度、某一网站而来)5.区分会员与非会员的访问以上在一个不大熟悉网站开发(做过一些桌面应用开发)的来说,说一下各项难易度 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /// <summary>/// 获取客户端IP/// </summary>/// <param name="page">页面</param>/// <returns></returns>private string GetClientIp(System.Web.UI.Page page){ //可以透过代理服务器 string userIP = page.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (userIP == null || userIP == "") { //没有代理服务器,如果有代理服务器获取的是代理服务器的IP userIP = page.Request.ServerVariables["REMOTE_ADDR"]; } return userIP;}Request.UrlReferrerRequest.RawUrlRequest.............. 。1:访问各个页面的IP可以很方便的HttpRequest中取得到。2:页面一旦响应给客户如果要检测客户的点击是比较麻烦的,因为点击的信息浏览器不会全部传回你的服务器,除非*你在页面上用脚本之类的记录点击并发回;*页面上所有的地址均是你网站上的其它页面,在其它页面上通过refers检查来源和cookies确定点击;3:和1一样,能够得到IP的前提就是它访问了某一个页面,所以这个问题只是如何比较好的实现。4:HTTP头中的refer5:通过session,一般使用cookies也可以使用其它如hidden form之类的。实现难度的话:2最难,5可能麻烦点,但没难度。其它都没什么难度,在页面中取到相关信息后往数据库里一写就OK。 1,最简单2,也很简单3,和2一样简单4,这个不知道5,这个很简单获取访客真实ip,这里考虑到代理服务器ip的滤过问题,两个函数放在一起使用 //获取访客真实IP的函数 public static string IPAddress() { string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (result != null && result != String.Empty) { //可能有代理 if (result.IndexOf(".") == -1) //没有“.”肯定是非IPv4格式 result = null; else { if (result.IndexOf(",") != -1) { //有“,”,估计多个代理。取第一个不是内网的IP。 result = result.Replace(" ", "").Replace("'", ""); string[] temparyip = result.Split(",;".ToCharArray()); for (int i = 0; i < temparyip.Length; i++) { if (IsIPAddress(temparyip[i]) && temparyip[i].Substring(0, 3) != "10." && temparyip[i].Substring(0, 7) != "192.168" && temparyip[i].Substring(0, 7) != "172.16.") { return temparyip[i]; //找到不是内网的地址 } } } else if (IsIPAddress(result)) //代理即是IP格式 return result; else result = null; //代理中的内容 非IP,取IP } } string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (null == result || result == String.Empty) result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (result == null || result == String.Empty) result = HttpContext.Current.Request.UserHostAddress; return result; } //检验是否为IP格式的函数 public static bool IsIPAddress(string str1) { if (str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15) return false; string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$"; Regex regex = new Regex(regformat, RegexOptions.IgnoreCase); return regex.IsMatch(str1); }至于获取页面点击和获取访客路径,只要把ip记录在库里面已统计就可以了至于会员和非会员涉及到一个认证机制,一般用session完成,会员登陆验证后在session里面写入一个身份标识,每次页面pageload的时候验证一下就可以,很简单 1.获取访问各页面的IP参考上面的代码2.获取各页面点击在页面里嵌入统计代码,自己写的,或者用别人的流量统计3.记录某一ip的访问页面在页面中嵌入获取IP的代码,然后将该IP保存到数据库或者啥的,由你自己定义4.记录访问途径(如:由百度、某一网站而来)HttpContext.Current.Request.UrlReferrer.ToString().Trim().ToLower()输出这句看看,不过如果是浏览器中输入地址直接访问页面的话,这句获取的应该是空值5.区分会员与非会员的访问 用session或者cookie区分,安全要求不是很高的话,建议用cookie 1楼的代码有点缺陷主要是HTTP_X_FORWARDED_FOR有些代理服务器不支持,另外多层代理服务器的情况就不好使了看起来2功能比较难,不是我想的那样,点击率是不是要用脚本来做呢?可能用js脚本,2功能我还确实没实现过,1,3,5都实现过,4的实现我在这里受教了! 5的代码我来给登陆的时候验证了是会员就Session["Custom_Dentify"] = "associator";然后再每个页面pageload的时候string l_Custom_Dentify = Session["Custom_Dentify"];if(l_Custom_Dentify.CompareWith(associator) == 0){ 会员处理程序}else{ 非会员处理程序} 谢谢wdf618只差2的代码了 5.区分会员与非会员的访问 这个就有登陆的,记录session值,session值为空的是非会员或者会员没登陆 思路如下:如果同一台机器两次登陆算作两次访问的话,那这个就不需要写js代码了,因为你前面要获取页面的每一个用户的ip,这样只要在数据库里面设计一个计数就可以了,每次读一个ip就把数据库里面计数加1,或者在库里面写入每次获得的ip数据和登陆时间,然后select COUNT(...) ... 就可以了。如果同一台机器多次登陆算作一个用户访问的话,就需要用到cookie,在用户cookie里面写一个标识,每次登录读这个标识,如果读到,计数就不+1,否则+1。注意这里不用ip的原因是因为ip是可以改的,而且前面获取ip的代码在遇到多个(超过4个)代理服务器转接的时候可能会获取代理服务器的ip,这样会造成统计偏差。你可以用C#或者js操作cookie,都是一样有效,不过js的话涉及一个向服务器传值的问题,用request.form或者ajax实现。C#写入cookie的代码HttpCookie aCookie = new HttpCookie("lastVisit");aCookie.Value = DateTime.Now.ToString();aCookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(aCookie);C#读出cookie的代码if(Request.Cookies["userName"] != null){ HttpCookie aCookie = Request.Cookies["userName"]; Label1.Text = Server.HtmlEncode(aCookie.Value);}js写入Cookie的代码var l_CookieValue = FormChatContent + l_newMessage;var OldChatCookie = l_CookieName + "=" + l_CookieValue;document.cookie = OldChatCookie; js读出cookie的代码function getCookie(searchName){ var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++) { var cookieCrumbs = cookies[i].split("="); var cookieName = cookieCrumbs[0]; var cookieValue = cookieCrumbs[1]; if (cookieName == searchName) { return cookieValue; } } return "";}然后验证,由于涉及到数据库,所以写入数据库的代码我没法写假设读出Cookie的值记录在l_ValueOFCookie中if(l_ValueOFCookie.ComparedWith("") == 0){ //更新数据库计数字段,使其自加; ...} 添加样式,单击改变层的背景色 .net 跨站传值问题 Repeater 调用JS问题 asp.net 如何动态生成界面? (急,急 ,在线等!)错误 命名空间“zj.IDAL”中不存在类型或命名空间名称“Iprice”(是缺少程序集引用吗?) 这是怎么回事? 请各位大虾解决一个简单问题 在asp.net中如何调用oracle的存储过程 如何在水晶报表的每一页后插入一个分页符? 请教关于不能对创建新控件回发后不能保存状态的解决方案 FormsAuthenticationTicket 类isPersistent属性 Theme
/// 获取客户端IP
/// </summary>
/// <param name="page">页面</param>
/// <returns></returns>
private string GetClientIp(System.Web.UI.Page page)
{
//可以透过代理服务器
string userIP = page.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (userIP == null || userIP == "")
{
//没有代理服务器,如果有代理服务器获取的是代理服务器的IP
userIP = page.Request.ServerVariables["REMOTE_ADDR"];
}
return userIP;
}Request.UrlReferrer
Request.RawUrl
Request.........
.....
1:访问各个页面的IP可以很方便的HttpRequest中取得到。
2:页面一旦响应给客户如果要检测客户的点击是比较麻烦的,因为点击的信息浏览器不会全部传回你的服务器,除非
*你在页面上用脚本之类的记录点击并发回;
*页面上所有的地址均是你网站上的其它页面,在其它页面上通过refers检查来源和cookies确定点击;
3:和1一样,能够得到IP的前提就是它访问了某一个页面,所以这个问题只是如何比较好的实现。
4:HTTP头中的refer
5:通过session,一般使用cookies也可以使用其它如hidden form之类的。实现难度的话:
2最难,5可能麻烦点,但没难度。其它都没什么难度,在页面中取到相关信息后往数据库里一写就OK。
2,也很简单
3,和2一样简单
4,这个不知道
5,这个很简单获取访客真实ip,这里考虑到代理服务器ip的滤过问题,两个函数放在一起使用
//获取访客真实IP的函数
public static string IPAddress()
{
string result = String.Empty;
result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (result != null && result != String.Empty)
{
//可能有代理
if (result.IndexOf(".") == -1) //没有“.”肯定是非IPv4格式
result = null;
else
{
if (result.IndexOf(",") != -1)
{
//有“,”,估计多个代理。取第一个不是内网的IP。
result = result.Replace(" ", "").Replace("'", "");
string[] temparyip = result.Split(",;".ToCharArray());
for (int i = 0; i < temparyip.Length; i++)
{
if (IsIPAddress(temparyip[i])
&& temparyip[i].Substring(0, 3) != "10."
&& temparyip[i].Substring(0, 7) != "192.168"
&& temparyip[i].Substring(0, 7) != "172.16.")
{
return temparyip[i]; //找到不是内网的地址
}
}
}
else if (IsIPAddress(result)) //代理即是IP格式
return result;
else
result = null; //代理中的内容 非IP,取IP
}
} string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (null == result || result == String.Empty)
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (result == null || result == String.Empty)
result = HttpContext.Current.Request.UserHostAddress; return result;
} //检验是否为IP格式的函数
public static bool IsIPAddress(string str1)
{
if (str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15) return false; string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$"; Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
return regex.IsMatch(str1);
}至于获取页面点击和获取访客路径,只要把ip记录在库里面已统计就可以了
至于会员和非会员涉及到一个认证机制,一般用session完成,会员登陆验证后在session里面写入一个身份标识,每次页面pageload的时候验证一下就可以,很简单
参考上面的代码
2.获取各页面点击
在页面里嵌入统计代码,自己写的,或者用别人的流量统计
3.记录某一ip的访问页面
在页面中嵌入获取IP的代码,然后将该IP保存到数据库或者啥的,由你自己定义
4.记录访问途径(如:由百度、某一网站而来)
HttpContext.Current.Request.UrlReferrer.ToString().Trim().ToLower()
输出这句看看,不过如果是浏览器中输入地址直接访问页面的话,这句获取的应该是空值
5.区分会员与非会员的访问
用session或者cookie区分,安全要求不是很高的话,建议用cookie
主要是HTTP_X_FORWARDED_FOR有些代理服务器不支持,另外多层代理服务器的情况就不好使了看起来2功能比较难,不是我想的那样,点击率是不是要用脚本来做呢?可能用js脚本,2功能我还确实没实现过,1,3,5都实现过,4的实现我在这里受教了!
登陆的时候验证了是会员就
Session["Custom_Dentify"] = "associator";
然后再每个页面pageload的时候
string l_Custom_Dentify = Session["Custom_Dentify"];
if(l_Custom_Dentify.CompareWith(associator) == 0)
{
会员处理程序
}
else
{
非会员处理程序
}
只差2的代码了
这个就有登陆的,记录session值,
session值为空的是非会员或者会员没登陆
如果同一台机器两次登陆算作两次访问的话,那这个就不需要写js代码了,因为你前面要获取页面的每一个用户的ip,这样只要在数据库里面设计一个计数就可以了,每次读一个ip就把数据库里面计数加1,或者在库里面写入每次获得的ip数据和登陆时间,然后select COUNT(...) ... 就可以了。如果同一台机器多次登陆算作一个用户访问的话,就需要用到cookie,在用户cookie里面写一个标识,每次登录读这个标识,如果读到,计数就不+1,否则+1。注意这里不用ip的原因是因为ip是可以改的,而且前面获取ip的代码在遇到多个(超过4个)代理服务器转接的时候可能会获取代理服务器的ip,这样会造成统计偏差。你可以用C#或者js操作cookie,都是一样有效,不过js的话涉及一个向服务器传值的问题,用request.form或者ajax实现。
C#写入cookie的代码
HttpCookie aCookie = new HttpCookie("lastVisit");
aCookie.Value = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);C#读出cookie的代码
if(Request.Cookies["userName"] != null)
{
HttpCookie aCookie = Request.Cookies["userName"];
Label1.Text = Server.HtmlEncode(aCookie.Value);
}js写入Cookie的代码
var l_CookieValue = FormChatContent + l_newMessage;
var OldChatCookie = l_CookieName + "=" + l_CookieValue;
document.cookie = OldChatCookie; js读出cookie的代码
function getCookie(searchName)
{
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++)
{
var cookieCrumbs = cookies[i].split("=");
var cookieName = cookieCrumbs[0];
var cookieValue = cookieCrumbs[1];
if (cookieName == searchName)
{
return cookieValue;
}
}
return "";
}然后验证,由于涉及到数据库,所以写入数据库的代码我没法写
假设读出Cookie的值记录在l_ValueOFCookie中if(l_ValueOFCookie.ComparedWith("") == 0)
{
//更新数据库计数字段,使其自加;
...
}