php用什么语句可以知道用户的浏览有没有禁用cookies?
因为要做一个投票的网页,一个IP只能投一张票。如果用户禁用了cookies,那他就可以无限次地投票了,所以要知道用户有没有禁用cookies,如果有的话,则不准他投票。
或者有没有其它的解决方法?
问题点数:20、回复次数:22Top
1 楼turtlevan(你是猪啊,亲我还愣着干嘛)回复于 2004-12-02 17:17:49 得分 2
可以通过一个页面自动返回结果
Top
2 楼hflsj(红枫)回复于 2004-12-02 19:19:36 得分 0
用session吧 cookies有的客户端浏览器禁用的Top
3 楼songsong2008()回复于 2004-12-02 19:46:06 得分 0
用session的话只要用户关掉浏览器,然后再打开,他又可以投票了啊Top
4 楼songsong2008()回复于 2004-12-02 19:46:58 得分 0
各位帮我想想办法,很急Top
5 楼syre(神仙)回复于 2004-12-02 20:31:20 得分 2
cookie还可以冒充呢
你可以记录的ip啊Top
6 楼songsong2008()回复于 2004-12-02 21:02:25 得分 0
我的代码是这样,但是用户禁用了cookies ,他就可以无限次投票了,正在郁闷中
$addr=$REMOTE_ADDR;
if($HTTP_COOKIE_VARS["addr"])
echo "你已投过票";
else
{
setcookie("addr",$addr,time()+31536000);
$v=$radio1;
$cn=mysql_connect('202.116.223.38','webdb','123') or dir('不能连接数据库');
$sql="update votes set star".$v."=star".$v."+1 where VID=1";
mysql_db_query("evote",$sql,$cn);
mysql_close($cn);
}Top
7 楼songsong2008()回复于 2004-12-02 21:02:40 得分 0
请大家一定要帮一下忙Top
8 楼zhiin(┈ Jcan ┈)回复于 2004-12-02 22:11:25 得分 3
setcookie("testcookie", true, time()+1000) ;
if(empty($_COOKIE['testcookie']))
{
echo "不支持COOKIE" ;
}
这样应该可以吧?~~~~~Top
9 楼surfchen(冲浪)回复于 2004-12-02 22:26:50 得分 2
干脆把IP存进数据库里~Top
10 楼xuzuning(唠叨)回复于 2004-12-03 08:09:25 得分 2
你给出的代码只是接收投票提交时的。
如果你在产生投票表单的页面中就对cookie赋值的话,参见zhiin(〃稚鹰〃)的代码,就很容易识别是否支持cookie了Top
11 楼songsong2008()回复于 2004-12-03 10:00:03 得分 0
我按楼上所说的这样做了,不行啊,那个testcookie函数返回true,为什么啊?
<HTML>
<HEAD>
<TITLE>主界面 </TITLE>
</HEAD>
<BODY background="gray.jpg">
<img src="star.jpg" align="right" border="0" width="600" >
<FORM METHOD=POST ACTION="vote.php">
<INPUT TYPE="radio" NAME="radio1" value="0">张一<br>
<INPUT TYPE="radio" NAME="radio1" value="1">张二<br>
<INPUT TYPE="radio" NAME="radio1" value="2">张三<br>
<INPUT TYPE="radio" NAME="radio1" value="3">张四<br>
<INPUT TYPE="submit" value="投票" onsubmit="return testcookie()"><br>
</FORM>
<?
function testcookie()
{
setcookie("test", true, time()+1000) ;
if(empty($_COOKIE['test']))
{
echo "<script language='javascript'> alert('不支持COOKIE'); </script>";
return false;
}
return ture;
}
?>
<a href="result.php">查看</a>
</BODY>
</HTML>
Top
12 楼wxq4100798(aa)回复于 2004-12-03 10:15:01 得分 3
呵呵,用IP+cookie记录Top
13 楼magicsnake(北极狐)回复于 2004-12-03 10:15:15 得分 0
嗯,研究一下Top
14 楼xuzuning(唠叨)回复于 2004-12-03 10:19:47 得分 2
你的写法是错误的
测试代码
<?php
setcookie('_my','_test_'); //设置cookie
?>
<script>
//检查cookie是否被启用,cookie变量和值弄得很奇怪是为了唯一的识别
if(/_my=_test_/.test(document.cookie))
alert('支持cookie');
else
alert('不支持cookie');
</script>
Top
15 楼songsong2008()回复于 2004-12-03 10:41:53 得分 0
我弄错了,这样才对,不过还是不行,onsubmit根本没有调用testcookie函数?真是郁闷啊,为什么没有调用呢?
<HTML>
<HEAD>
<TITLE>主界面 </TITLE>
<?
function testcookie()
{
setcookie("test", true, time()+1000) ;
if(empty($_COOKIE['test']))
{
echo "<script language='javascript'> alert('不支持COOKIE'); </script>";
return false;
}
return true;
}
?>
</HEAD>
<BODY background="gray.jpg">
<img src="star.jpg" align="right" border="0" width="600" >
<FORM METHOD=POST ACTION="vote.php" onsubmit="testcookie()">
<INPUT TYPE="radio" NAME="radio1" value="0">张一<br>
<INPUT TYPE="radio" NAME="radio1" value="1">张二<br>
<INPUT TYPE="radio" NAME="radio1" value="2">张三<br>
<INPUT TYPE="radio" NAME="radio1" value="3">张四<br>
<INPUT TYPE="submit" value="投票"><br>
</FORM>
<a href="result.php">查看</a>
</BODY>
</HTML>
Top
16 楼songsong2008()回复于 2004-12-03 10:46:43 得分 0
xuzuning(唠叨)的这一句不是很清楚
if(/_my=_test_/.test(document.cookie))
那两个/代表什么意思?转义?
=又代表什么意思?不是==吗?Top
17 楼isline(缘清)回复于 2004-12-03 10:52:40 得分 2
用cookie也不能防止恶意投票啊,他可以先访问你上面提到的投票界面页,在你检测cookie的事件完成后,他再到cookie的文件夹清空所有cookie,然后将该文件夹NTFS权限deny掉,再在你的頁麵中找到你处理投票的页面,就是你<FORM METHOD=POST ACTION="vote.php">中vote.php页,然后自己写一个简单的html页面,每5秒页面自动刷新一次,每一次刷新自动提交表单,这都是很简单的html代码,这样就破解了你的思路,因为你的检测cookie页和投票处理页面是分開的,上述方法先让你建立并检测cookie,然后再禁用cookie,再刷票。所以最安全的办法就是记录ip。
我写投票程序除非我自己想留后门,不然是不会用cookie的。
Top
18 楼xuzuning(唠叨)回复于 2004-12-03 10:53:20 得分 0
“onsubmit根本没有调用testcookie函数”
onsubmit只能调用js的函数,而你的testcookie是php函数。当然是不行了
if(/_my=_test_/.test(document.cookie))
这句js语句看不懂吗?
他是检查在document.cookie是否包含串“_my=_test_”Top
19 楼songsong2008()回复于 2004-12-04 12:32:55 得分 0
isline(缘清)
不要用保存IP的方法
用session可不可以解决这个问题?Top
20 楼songsong2008()回复于 2004-12-04 17:18:25 得分 0
记录IP是不是有两种方法啊,一种是存sesion,一种是在数据库里存ip?Top
21 楼loveconan(放牛娃娃)回复于 2004-12-05 02:19:42 得分 0
如果200人用同一个IP呢Top
22 楼isline(缘清)回复于 2004-12-06 11:06:36 得分 2
songsong2008:
isline(缘清)
不要用保存IP的方法
用session可不可以解决这个问题?
Session只要关闭浏览器就没了。所以Session无法完成你的功能。
目前主流使用Cookie,但是要绝对公平只能记录IP。
200人一个IP也没办法,但是即使这样,也不会对公平性有影响,因为记录IP会影响票数减少,但是票数大家一起少。Top




