唯一标识是openid,获取方法参考微信api相关文档,这个回答好像是废话,但我只能这么回答
首先服务端就排除了,因为可以用多个用户登录.
①.、cookie 这个你排除了,可能是因为清除cookie比较容易操作.但这也是一种办法.
综上,不可能完全的防止,但可以采用几种技术的结合,这样可以增加重复发布的难度.
但是还是那句话,是否重复发表信息是由用户决定的.如果用户认为重复发布的成本高于了解除这个限制的成本,那么也就降低了用户重复发布的几率.
这个没有完美的解决方案,只能是尽力.
这种方法有一定的概率会出现重复
uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.
public function create_guid($namespace = '') {
static $guid = '';
$uid = uniqid("", true);
$data = $namespace;
$data .= $_SERVER['REQUEST_TIME'];
$data .= $_SERVER['HTTP_USER_AGENT'];
$data .= $_SERVER['LOCAL_ADDR'];
$data .= $_SERVER['LOCAL_PORT'];
$data .= $_SERVER['REMOTE_ADDR'];
$data .= $_SERVER['REMOTE_PORT'];
$guid = '{' .
'-' .
'}';
return $guid;
}
但,就如你说的, ip会变, cookie会排除, 所以嘛, 没有办法了!
不像桌面应用程序(软件), 由于是直接运行在用户电脑的上的, 所以可以获取网卡地址, 这个比较唯一(但也不绝对, 有软件可以改网卡地址)
权限足够的情况下,可以输出cpu信息php调用:$a = exec('cat /proc/stat');php有个执行方式是用++包裹字符串,同样可以在系统上直接执行同样需要足够的权限.
php??
class?GetMacAddr{
var?$return_array?=?array();?//?返回带有MAC地址的字串数组
var?$mac_addr;
function?GetMacAddr($os_type){
switch(strtolower($os_type)){?
case?"linux":$this-forLinux();break;
default:$this-forWindows();break;
}?
$temp_array?=?array();?
foreach?(?$this-return_array?as?$value?){?
?$this-mac_addr?=?$temp_array[0];?
?break;?
unset($temp_array);?
return?$this-mac_addr;?
function?forWindows()?{?
@exec("ipconfig?/all",?$this-return_array);?
if?(?$this-return_array?)?
return?$this-return_array;?
else{?
if?(?is_file($ipconfig)?)?
?@exec($ipconfig."?/all",?$this-return_array);?
else?
?@exec($_SERVER["WINDIR"]."\system\ipconfig.exe?/all",?$this-return_array);?
//---实例化类
$mac?=?new?GetMacAddr(PHP_OS);?
echo?$mac-mac_addr;?
echo?"br?/";?
以上代码是获取mac地址的代码,在网上抄的,但实测有效,括号,我x,我第一次知道原来php也可以执行命令行...
至于如何限制,应该是去截取mac的一部分经行if判断就可以了,你先尝试一下