session和cookie关系:session依赖于cookie
基于cookie做用户验证时,敏感信息不适合放在cookie中
原理:
cookie定义:保存在用户游览器端的键值对
session定义:保存在服务器端的键值对
session原理:客户端发起登录请求,服务器端通过验证后,生成随机字符串返回给客户端,并且服务器端将此字符串和客户端信息存储
到本地数据库中,用于客户端下次登录验证。
session 和 cookie 区别
cookie只是保存在客户端游览器的内容为键值对的文件,session是存储在服务器端的,可以文件,缓存,数据库形式存在,随机字串和数据
存储在服务器端,只将随机字符串返回给客户端
以下为一个帐号登录实例:
def login(request):
if request.method == 'GET':
return render(request,'login.html')
elif request.method == 'POST':
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'root' and pwd == '':
# 设置session帐号登录名称及登录状态
request.session['username'] = user
request.session['is_login'] = True
request.session.set_expiry(10) # sesson超时时间10秒
return redirect('/index/')
else:
return render(request,'login.html') def index(request):
# 获取session值
if request.session.get('is_login',None):
return render(request,'index.html',{'username':request.session['username']})
def logout(request):
# 删除所有session,进行当前登录注销
request.session.clear()
return redirect('/login')
操作介绍:
request.session['k1'] # 获取k1的值,不存在则报错
request.session.get('k1',None) # 获取k1的值,不存在则返回None
request.session['k1'] = 123 # 不存在则创建,存在则更新
request.session.setdefault('k1',123) # 不存在则创建默认值,存在则不作操作
del request.session['k1'] # 删除k1
键,值,键值对操作
request.session.keys() # 提取所有键
request.session.values() # 提取所有值
request.session.iterkeys() # 迭代键
request.session.itervalues() # 迭代值
request.session.iteritems() # 迭代键值
request.session.session_key # 用来获取session字符串
request.session.clear_expired() # 清除所有已超过自身设定超时时间的session
request.session.exists('session_key') # 检查session字串在数据库中是否存在
request.session.delete('session_key') # 删除当前用户的所有session数据
request.session.clear() # 清除用户的所有session数据,用于注销
request.session.set_expiry(value): 设置session超时时间,默认2周
# 如果value是个整数,session会在value秒后失效,
# 如果value是个datatime或timedelta,session会在这个时间后失效
# 如果value是0,用户关闭游览器session会失效
# 如果value是None,session会依赖全局session失效策略
配置文件setting中设置默认操作:
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认),表示session默认存储在数据库中
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,默认修改之后才保存(默认)
主要:SESSION_SAVE_EVERY_REQUEST = True # 超时时间按照每次访问之后开启计算
session存储位置如下:引擎配置
1:数据库(默认)
2:缓存配置:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
memcache写法:
CACHES = {
'default': { # 这里的default就是上面缓存配置的default
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
3:文件配置:
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
4:缓存+数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
5:加密cookie session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎,加密后放入cookie

最新文章

  1. 你究竟有多了解Spring?
  2. Building third-party products of OpenCascade
  3. [2014.01.27]WFsoft.wfLibrary.wfVerifyImage 1.8
  4. 【elasticsearch】python下的使用
  5. SQLServer 开启远程访问,也可逆向思维进行关闭
  6. spring webservice 开发demo (实现基本的CRUD 数据库采用H2)
  7. windows和linux共享文件
  8. Chain of Responsibility 责任链模式
  9. ListView列表拖拽排序
  10. Android SDK 更新时修改hosts文件仍然无法更新,可试试这个方法……
  11. 【特殊的图+DP】【11月校赛】大家一起玩游戏
  12. 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法
  13. C++中vector 容器的基本操作
  14. HTTPS 之 TLS 性能调优
  15. CMD命令行netsh添加防火墙规则
  16. tomcat 与 nginx,apache的区别
  17. faster rcnn训练自己的数据集
  18. FPGA笔试题集锦(血的教训)
  19. Python学习——深浅拷贝
  20. MySQL生产环境下的主从复制启动项

热门文章

  1. iOS Getter 和Setter 注册xibcell
  2. 【数据分析 R语言实战】学习笔记 第五章 数据的描述性分析(下)
  3. 更新github上的代码
  4. 第二周作业xml学习情况
  5. mysql 增删查改
  6. DROP TYPE - 删除一个用户定义数据类型
  7. flask_第一个程序
  8. json-server && axios
  9. Java集合(六)--ArrayList、LinkedList和Vector对比
  10. 关于mysql服务突然运行不了的问题-“本地计算机上的mysql服务启动后停止,某些...”