如何解决request.session 变量正在自行消失
我每次登录时都会设置会话变量。 问题是,如果我使用本地 ip '127.0.0.1:8000' 来运行我的 python-django web,会话变量工作正常。但是如果我在设置每个会话变量的值后使用我的原始 IP '192.168.2*.***',几秒钟后变量本身不能被调用,我的意思是我得到一个错误会话变量未声明' KeyError: 用户名'
这是我登录时的代码,如果ajax数据返回'valid',我使用ajax并将document.location.href替换为Home url
@csrf_exempt
def CheckLogin(request):
if request.method == 'POST':
id = request.POST['id']
query = query_api(
"SELECT * FROM user_tbl WHERE employee_id='" + id + "';")
if len(query) == 0:
return JsonResponse({"data": "Invalid username"},safe=False)
request.session['test'] = "asdjkahsdkjhk"
request.session['logged_in'] = True
request.session['username'] = id
request.session['password'] = "1234"
request.session['role'] = query[0]["role"]
test = json.dumps(query,indent=4,cls=DateTimeEncoder)
return JsonResponse({"data": "valid","password": test,"role": query[0]["role"]},safe=False)
return JsonResponse({"data": "invalid ajax"},safe=False)
虽然这些是我检查是登录还是已经登录的代码。
@csrf_exempt
def CheckifLoggedin(request):
if 'logged_in' in request.session:
return JsonResponse({"data": "logged_in"},safe=False)
return JsonResponse({"data": "for log-in"},safe=False)
如果我尝试使用此代码获取用户名:
用户名 = request.session['用户名']
它只是返回这个错误:KeyError: username
是的,如果我使用 127.0.0.1:8000 作为默认 url 服务器,它运行良好,但如果我使用我的 IP,则不会。
这些是我 settings.py 中的代码
DEBUG = True
CSRF_TRUSTED_ORIGINS = ['http://192.168.2*.***:8000','192.168.2*.***:8000']
SECURE_HSTS_SECONDS = '3600'
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SESSION_COOKIE_SECURE = True
SESSION_SAVE_EVERY_REQUEST = True
CSRF_COOKIE_SECURE = True
ALLOWED_HOSTS = ['192.168.2*.***','127.0.0.1','localhost']
# Application definition
INSTALLED_APPS = [
# 'corsheaders',#ADDED DJANGO APPS
'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',#MY APPS
'dashboard',#ADDED DJANGO APPS
'rest_framework',]
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',)
}
MIDDLEWARE = [
# 'corsheaders.middleware.CorsMiddleware','django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',]
# CORS_ORIGIN_ALLOW_ALL = True
# CORS_ALLOW_CREDENTIALS = True
ROOT_URLCONF = 'nfpo.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},]
WSGI_APPLICATION = 'nfpo.wsgi.application'
会话变量在 1 次请求后消失。 此外,我发现使用我的 IP 运行服务器不会在数据库中保存会话。我该怎么办?
解决方法
找到了一个解决方案,我创建了一个临时应用程序,该应用程序可以创建完美运行的会话数据并将其设置复制到我的主应用程序中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。