文章目录
django使用session,django-session 存储位置
- 在Django中Session是通过一个中间件管理的。如果要在应用程序中使用Session,需要在settings.py中的MIDDLEWARE_CLASSES变量中加入
"django.contrib.sessions.middleware.SessionMiddleware"
。
设置session的保存位置,有三种方法:
- 保存在关系型数据库(db);
- 保存在缓存数据库(cache) 或者 关系+缓存数据库(cache_db);
- 保存在文件系统中(file)。
1. 将Session存储在数据库中
- Session存储在数据库中,将
"django.contrib.sessions"
加入到INSTALLED_APPS 变量中。然后运行manage.py syncdb
在数据库中创建相应的存储Session的数据库表。
2. 将Session存储在缓存中
- 如果想获得更好的性能,可以将Session保存在缓存中。
这里有两种配置方式:
- 一种是设置
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
。这是一种简单配置,Session将之被保存在缓存中,但是不保证Session总是能取到(比如缓存溢出时Session会丢失); - 另一种方式是设置
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
。这种方式下,Session在保存到缓存的同时还会被保存到数据库中,当Django在缓存中找不到Session时,会从数据库中找到。第二种方式会有一点点性能开销,但是安全性和冗余性更好。
3. 将Session存储在文件系统中:
- 最后一种方式是将Session存储在文件系统中。需要设置
SESSION_ENGINE = "django.contrib.sessions.backends.file"
,这时你还需要同时设置SESSION_FILE_PATH 变量,它代表Session文件保存的位置,缺省的设置一般是tempfile.gettempdir(),表示系统的临时目录。这里要确保应用程序对那个目录有读写的权限。
配置 settings.py 关于session的默认配置
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
把Django的session放到redis数据库中
# 1.安装使用django-redis-session库
pip install django-redis-sessions
# 2.配置:
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS = {
'host': 'localhost',
'port': 6379,
'db': 0,
'password': 'password',
'prefix': 'session',
'socket_timeout': 1
}
- 缓存设置成redis:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}