欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

视频学习网站防作弊方法

程序员文章站 2022-04-02 11:05:40
为了防止用户多点登录,同时开多个视频课程,对课程进度进行作弊,需要在每次登录时验证是否存在其他登录的session,并将使用其他session观看的课程视频记录停掉。从网上找到两种思路:1、查session表中存的userid,由于userid是编码后存储在session表的data字段中,因此每次调用userid都需要解码和遍历整个数据集https://blog.csdn.net/weixin_34126215/article/details/880070602、将每个用户上次登录的....

为了防止用户多点登录,同时开多个视频课程,对课程进度进行作弊,需要在每次登录时验证是否存在其他登录的session,并将使用其他session观看的课程视频记录停掉。

 

从网上找到两种思路:

1、查session表中存的userid,由于userid是编码后存储在session表的data字段中,因此每次调用userid都需要解码和遍历整个数据集

https://blog.csdn.net/weixin_34126215/article/details/88007060

2、将每个用户上次登录的sessionid存储在user扩展表中,这样就能快速查找用户对应的session。

https://blog.csdn.net/weixin_44834666/article/details/106017407

 

建议使用第二种思路,但我的实现方法有些区别。

 

参考手册:

读取除本次请求外的session的方法:

https://docs.djangoproject.com/zh-hans/3.1/topics/http/sessions/#using-sessions-out-of-views

扩展预定义User模型的方法:

https://docs.djangoproject.com/zh-hans/3.1/topics/auth/customizing/#extending-the-existing-user-model

一对一关联:

https://docs.djangoproject.com/zh-hans/3.1/topics/db/examples/one_to_one/

 

关于python装饰器:https://www.runoob.com/w3cnote/python-func-decorators.html

带参数的装饰器

装饰器还有更大的灵活性,例如带参数的装饰器,在上面的装饰器调用中,该装饰器接收唯一的参数就是执行业务的函数 foo 。装饰器的语法允许我们在调用时,提供其它参数,比如@decorator(a)。这样,就为装饰器的编写和使用提供了更大的灵活性。比如,我们可以在装饰器中指定日志的等级,因为不同业务函数可能需要的日志级别是不一样的。

def use_logging(level):
    def decorator(func):
        def wrapper(*args, **kwargs):
            if level == "warn":
                logging.warn("%s is running" % func.__name__)
            elif level == "info":
                logging.info("%s is running" % func.__name__)
            return func(*args)
        return wrapper

    return decorator

@use_logging(level="warn")
def foo(name='foo'):
    print("i am %s" % name)

foo()

上面的 use_logging 是允许带参数的装饰器。它实际上是对原有装饰器的一个函数封装,并返回一个装饰器。我们可以将它理解为一个含有参数的闭包。当我 们使用@use_logging(level="warn")调用的时候,Python 能够发现这一层的封装,并把参数传递到装饰器的环境中。

@use_logging(level="warn") 等价于 @decorator

 

 

本文地址:https://blog.csdn.net/qq_27361945/article/details/110917180

相关标签: django