1 在您的用户/配置文件应用程序中添加管理命令文件
要添加管理命令,请按照以下步骤操作:
https://docs.djangoproject.com/en/1.10/howto/custom-management-commands/
2 管理命令代码:
杀死所有拥有超过10个会话的用户的会话,如果需要,您可以将该值更改为1K,或将此值作为参数发送到管理命令。
from django.core.management.base import BaseCommand, CommandError
from django.contrib.sessions.models import Session
from django.contrib.auth.models import User
class Command(BaseCommand):
def handle(self, *args, **options):
session_user_dict = {}
for ses in Session.objects.all():
data = ses.get_decoded()
user_owner = User.objects.filter(pk = data.get('_auth_user_id', None))
if int(data.get('_auth_user_id', None)) in session_user_dict:
session_user_dict[int(data.get('_auth_user_id', None))] += 1
else:
session_user_dict[int(data.get('_auth_user_id', None))] = 1
for k,v in session_user_dict.iteritems():
if v > 10:
for ses in Session.objects.all():
data = ses.get_decoded()
if str(k) == data.get('_auth_user_id', None):
ses.delete()
3. 可选的密码更改 -
在结束恶意用户会话后,将该用户的密码更改为不同的密码。
要实现此操作,请更改上述代码中的最后一个循环。
for k,v in session_user_dict.iteritems():
if v > 10:
for ses in Session.objects.all():
data = ses.get_decoded()
if str(k) == data.get('_auth_user_id', None):
ses.delete()
theuser = User.objects.filter(pk=k)
theuser.set_password('new_unknown_password')
4. 添加一个 Django 管理命令到 crontab 中,每分钟/小时或其他时间,请参考以下指南:https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/
如果您正在使用虚拟环境,请注意从cron运行的管理命令需要先进入虚拟环境。您可以使用.sh脚本完成此操作,如果需要帮助,请咨询相关人员。