刷投票脚本 pick王菊?作为“菊外人”的程序员能做点什么?

11/28 06:19:17 来源网站:辅助卡盟网

目前,很多大型网站都采用一个开源的SSO解决方案——CAS,CAS由耶鲁大学开发的单点登录系统(SSO,single sign-on),应用广泛,具有独立于平台的,易于理解,支持代理功能。

权限控制

在投票网站验证完用户的登录信息之后,紧接着会判断用户的权限,然后根据不同的权限来给用户分配不同的可投票次数。

关于权限的设计,一直是很多网站都要关心的问题。几乎所有的网站都会有一定的权限要求。

目前,关于权限设计大部分均采用RBAC理论(Role-Based Access Control),即基于角色的权限访问控制。

RBAC认为权限授权实际上是Who、What、How的问题。在RBAC模型中,Who、What、How构成了访问权限三元组,也就是“Who对What进行How的操作”。

一个简单的权限系统应该包含以下几个基本元素:

用户、角色、权限、资源、操作。

【用户】可以属于多个【角色】。【角色】可以认为是【权限】的合集。【权限】描述的是对【资源】的可【操作】能力。

比如在“pick王菊”这件事上,虽然大家都是“陶渊明”(王菊的粉丝自称陶渊明,因为陶渊明爱菊花),但是有些用户的角色是VIP用户,有些用户的角色是普通用户。VIP角色的用户在投票权限上就比普通用户更高。

限时开启

几乎所有的投票活动都是有一个起止时间的,只有在有效时间段内用户才可以参与投票。也就是说,当活动未开始的时候,用户来到投票页面,投票按钮应该是置灰无法点击的,有些网站还会给出倒计时的提示。

这其中就涉及到很多问题了。如何在时间到达时将按钮点亮呢?用户通过非法手段在有效时间外点击按钮如何处理?到时间后按钮又如何置灰?

一般情况下,用户访问的投票页面被设计为静态页面,被缓存在 CDN 与反向代理服务器中,甚至在用户的浏览器上。所以在投票活动未开始时,用户的刷新页面请求是不会到达应用服务器。同样,在后端的投票接口中,在接受到用户的投票请求时,也要做时间有效性的校验。

我们在秒杀商品的静态页面中加入一个 JavaScript 文件引用,它包含投票是否已开始的标志。秒杀开始时,系统会生成一个新的 JavaScript 文件,它会被浏览器加载(刷新页面或定时脚本),这样就能点亮页面中的购买按钮。这个 JavaScript 文件使用随机版本号,确保它不被浏览器、CDN 和反向代理服务器缓存。

同理,到达活动截止时间的按钮置灰也通过js引用的方式可以解决。

准确计数

对于一个投票系统来说,最重要的就是计数了。要保证在高并发的情况下用户的投票既不能多也不能少这是一个很大的挑战。

在“pick王菊”的投票中,计数场景有多处需要。比如对于王菊的票数需要准确的记录下来。还有,会员的已投票次数也要准确的记录下来。这里我们就拿被投票者的票数来举例。

基于MySql计数

我们能想到的最简单的方法就是在MySql数据库表中创建一条记录,记录当前被投票者的票数即可。如:

1CREATE TABLE IF NOT EXISTS `table_user_polls`(
2   `id` INT UNSIGNED AUTO_INCREMENT,
3   `user_id` bigint NOT NULL,
4   `polls` bigint NOT NULL
5   PRIMARY KEY ( `runoob_id` )
6)ENGINE=InnoDB DEFAULT CHARSET=utf8;

当然,这只是一张记录总票数的表。当有用户投票的时候,我们通过修改表中的polls的值来进行:

1update table_user_polls set polls = polls +1 where user_id = "1000";

    暂无相关资讯
刷投票脚本 pick王菊?作为“菊外人”的程序员能做点什么?