视频学习⽹站防作弊⽅法
为了防⽌⽤户多点登录,同时开多个视频课程,对课程进度进⾏作弊,需要在每次登录时验证是否存在其他登录的ssion,并将使⽤其他
ssion观看的课程视频记录停掉。
从⽹上找到两种思路:
1、查ssion表中存的urid,由于urid是编码后存储在ssion表的data字段中,因此每次调⽤urid都需要解码和遍历整个数据集
2、将每个⽤户上次登录的ssionid存储在ur扩展表中,这样就能快速查找⽤户对应的ssion。
建议使⽤第⼆种思路,但我的实现⽅法有些区别。
参考⼿册:
读取除本次请求外的ssion的⽅法:
扩展预定义Ur模型的⽅法:
⼀对⼀关联:
带参数的装饰器
装饰器还有更⼤的灵活性,例如带参数的装饰器,在上⾯的装饰器调⽤中,该装饰器接收唯⼀的参数就是执⾏业务的函数foo。装饰器的
语法允许我们在调⽤时,提供其它参数,⽐如@decorator(a)。这样,就为装饰器的编写和使⽤提供了更⼤的灵活性。⽐如,我们可以在装
饰器中指定⽇志的等级,因为不同业务函数可能需要的⽇志级别是不⼀样的。
defu_logging(level):
defdecorator(func):
defwrapper(*args,**kwargs):
iflevel=="warn":
("%sisrunning"%func.__name__)
eliflevel=="info":
("%sisrunning"%func.__name__)
returnfunc(*args)
returnwrapper
returndecorator
@u_logging(level="warn")
deffoo(name='foo'):
print("iam%s"%name)
foo()
上⾯的u_logging是允许带参数的装饰器。它实际上是对原有装饰器的⼀个函数封装,并返回⼀个装饰器。我们可以将它理解为⼀个含
有参数的闭包。当我们使⽤@u_logging(level="warn")调⽤的时候,Python能够发现这⼀层的封装,并把参数传递到装饰器的环境
中。
@u_logging(level="warn")等价于@decorator
本文发布于:2022-12-30 19:07:29,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/61056.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |