怎么得到伯爵的数量。下载每个用户/计算机唯一的文件

时间:2012-01-23 11:01:46

标签: java mysql struts2

我被困住了,帮帮我!!!

我有一个FILE表: file_id BIGINT,file_name VARCHAR,文件BLOB ......等

我想计算每个用户/计算机每个文件的下载次数,以便我可以识别每个文件的总数,并且还希望避免单个用户多次下载文件的情况,

我只是想知道它可以实现的最佳方式,到目前为止我已经想到了以下方法:

1)创建表FILE_DOWNLOAD_COUNT(FILE_ID,UNIQUE_ID) 2)每当下载文件时,在该表中插入一条新记录,其中包含下载文件的ID和与每个下载请求相对应的UNIQUE值。

但是,应该用什么来识别UNIQUE_ID ???

IP ADDRESS / MAC ADDRESS / COOKIE值

问题:

IP ADDRESS:在每个新连接上,分配一个新的IP地址(动态IP)

MAC ADDRESS:可以更改,可以使用MAC欺骗

COOKIE值:可以删除。

所以请帮助我如何以最可靠的方式实现这一目标。

仅供参考:我在JAVA(STRUTS2 + Spring)+ MYSQL中实现它

提前致谢

1 个答案:

答案 0 :(得分:1)

首先,关于你的问题的一些注释:

MAC ADDRESS可能无关紧要,除非您向本地网络提供文件。否则就没有意义了。

IP地址:您还应该考虑,如果您的用户位于代理后面,他们将使用相同的IP源访问您的服务器,在这种情况下,不应阻止它们。


答案:

在我看来,最好的解决方案是使用本地帐户或openid / googleid /其他人对您的用户进行身份验证,然后在FILE_DOWNLOAD_COUNT表中使用用户ID存储。

如果使用帐户不是一种选择,我担心您将不得不管理这两种情况(IP和COOKIES),并且预计将绕过两种检查的用户数量相对较少。

另外,请不要忘记添加某种captcha以防止自动下载。

link也可能会引起关注,如果用户broswer之前已经访问过“下载某个特定文件”,它可能会尝试解密,因为它会询问网络服务器是否有新内容或者如果所服务的页面是最新的。并使用此值创建某种额外的检查机制(或增加/减少其他机制的权重)。