Cookie的缺点
Cookie保存在浏览器端,不安全
Cookie的长度不能超过4096字节
Session是什么?
保存在服务器端的键值对
1 获取、设置、删除Session中数据
# 获取session值
request.session["k1"]
# 获取session值
request.session.get("k1", None)
# 设置Session
request.session["k1"] = 123
# 为session设置默认值
request.session.setdefault("k1", 123)
# 删除Session中的数据
del request.session["k1"]
所有键,值,键值对
# session中的所有键
request.session.keys()
# session中的所有值
request.session.values()
# session中的所有键值对
request.session.items()
# session中的可迭代的键
request.session.iterkeys()
# session中的可迭代的值
request.session.itervalues()
# session中的可迭代键值对
request.session.iteritems()
会话session的key
request.session.session_key
将所有session失效日期小于当前日期的数据删除
request.session.clear_expired()
检查会话session的key在数据库中是否存在
request.session.exists("session_key")
删除当前会话的所有session数据
request.session.delete()
删除当前的会话数据并删除会话的Cookie
request.session.flush()
这用于确保前面的会话数据不可以再次被用户的浏览器访问。
例如:django.contrib.auth.logout()函数中就会调用它。
session默认只会过期,为了考虑到数据的需要,django并不会从数据库或者文件中删除,所以这个要运维人员或者后台管理人员手动的清除那些已经过期了的session,最快捷的方式是通过命令定时的删除:
python3 manage.py clearsessions
超时后,cookie会被游览器删除,但django不会把超时的session在数据库里删除。 # 这条代码,执行后,会删除数据库里超时的session,不建议在这里使用,建议使用python3 manage.py clearsessions。 # 这条命令是在视图模式下配置的 request.session.clear_expired()
2 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
如果value是个整数,session会在value秒后失效。
如果value是个datetime或timedelta,session就会在这个时间后失效。
如果value是0,用户关闭浏览器session就会失效
如果value是None,session会依赖全局session失效策略
3 Session流程解析:
4 Session全局配置
在settings.py的代码里,写入:
# 这个设置会对系统造成很大压力
# 缺省参数是False,如果设置session的过期时间30分钟,30分钟过后,session准时失效;
# 如果设置 True,在30分钟期间有请求服务端数据,就不会过期(为什么逛一晚上淘宝,也不会登出,但是不浏览器不刷新了就会自动登出)。
SESSION_SAVE_EVERY_REQUEST = True
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,默认修改之后才保存(默认)