日期:2014-05-18 浏览次数:20597 次
string userIp; if(Request.ServerVariables["HTTP_VIA"] != null) userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); else userIP = Request.ServerVariables["REMOTE_ADDR"].ToString();
------解决方案--------------------
那如果IP不固定,岂不是可以多投?
------解决方案--------------------
只提供一个思路吧,不太确定是否可以用机器的MAC地址来判断?
如果只有一个公网IP,那IP相同,不过每台机器的MAC地址不同,可否通过调用API来获取客户端的MAC地址,一同获取然后根据IP+MAC的形式判断呢?
------解决方案--------------------
public static string GetIP() { string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (null == result || result == String.Empty) { result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } if (null == result || result == String.Empty) { result = HttpContext.Current.Request.UserHostAddress; } if (null == result || result == String.Empty || !Utils.IsIP(result)) { return "0.0.0.0"; } return result; }
------解决方案--------------------
IP现在多数不固定,通过注册用户来避免吧
------解决方案--------------------
C# codepublic static string GetIP()
{
string result = String.Empty;
result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (null == result || result == String.Empty)
{
result = HttpContext.Current.Request.UserHostAddress;
}
if (null == result || result == String.Empty || !Utils.IsIP(result))
{
return "0.0.0.0";
}
return result;
}
------解决方案--------------------
首先可以否定你的取内网ip的方法
比如 a 公司有人内网ip是 192.168.0.123
b公司也有人内网ip是 192.168.0.123
这样的话a公司的这个人投票后 b公司的这个人就无法投票啦
其次 通过web取得用户本机ip(内网ip) 应该无法直接取 只能通过com控件来实现了。
最后 投票限制ip的方法不可取 可以通过切换代理来大量投票
建议还是限制一个登录用户只能投票1次把,或者其他方法。
------解决方案--------------------
你要去本机内网的IP是不可能的....可以用下cookie.
//投票防作弊 HttpCookie makecookie = new HttpCookie("Vote");//制造cookie HttpCookie readcookie = Request.Cookies["Vote"];//读出cookie if (readcookie == null)//从未投过票 { makecookie.Values.Add("VoteItem", "<" + strID + ">"); } else { //Response.Write(readcookie.Values["VoteItem"]); //Response.End(); string strAllItem = readcookie.Values["VoteItem"].ToString();//读取已投票的项 if (strAllItem.IndexOf("<" + strID + ">") == -1)//未投过票 { makecookie.Values.Add("VoteItem", readcookie.Values["VoteItem"