django sesstion

基于cookie做用户验证时:敏感信息不适合放在cookie

session依赖cookie

使用session首先要进行以下操作:

session

1. installed_apps

2. 中间件

3. 设置存储形式

4. 引用 request.session

django session的设计原理

1. 如果用户是第一次请求(如何看用户是不是第一次请求,就看客户端ID是否保存了session的cookie)

a) 创建session model

                   i. 生成一个key sessionID 随机的一个字符串 uuid

                 ii. 保存到用户的浏览器cookie

                iii. 保存到session_engine指定的位置

2. 如果第二次以上的请求,客户端ie都会自动提交cookie到django,django中利用你配置的sessionmiddleware中间件激活session利用cookie中的sessionID到session_engine指定的位置读取session model并设置到request的session属性上

3. 真是因为这样,你才能在你的view里面通过request.session使用session

4. session本身就是一个dict字典

5. session在存数据时数据必须支持序列化json

Django中对于session的存储方式:

Django中支持session,其中内部提供了5种类型session供开发者使用:

       数据库(默认)

       缓存

       文件

       缓存+数据库

       加密cookie

1、如果是数据库,需要在settings.py中配置如下:
SESSION_ENGINE=’django.contrib.sessions.backends.db’(引擎(默认))

2、如果是缓存session,需要settings.py中配置如下:

SESSION_ENGINE ='django.contrib.sessions.backends.cache'(引擎)

SESSION_CACHE_ALIAS= 'default'  使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

3    如果是文件session, 需要在settings.py中配置如下:

SESSION_ENGINE ='django.contrib.sessions.backends.file' (引擎)

SESSION_FILE_PATH=None  缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()   

4    如果是缓存+数据库session,需要在settings.py中配置如下:

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'      (引擎)

 

配置setting.py

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原理:

cookie是保存在浏览器端的键值对

session是保存在服务器端的键值对

session服务端中存在的数据为:

session={

       随机字符串1:{用户1 的信息}

       随机字符串2:{用户2 的信息}

}                  

session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串

session的工作过程

1、    生成随机字符串

2、    写到用户浏览器的cookie

3、    保存到session

4、    在随机字符串对应的字典中设置相关内容

而上述过程在Django中的体现为:

request.session[‘username’]=user

这里的username为通过request.POST.get(‘username’)从前端html页面中获取到的用户名信息

同样的通过request.session[“username”]也可以获取相对应的值

在这个过程中:
1
、首先获取当前用户的随机字符串

2、根据随机字符串获取对应的内容

session的操作

request.session[‘k1’]如果不存在则会报错

request.session.get[‘k1’],如果不存在则会报错,为了防止出错可以

request.session.get[‘k1’,none]

request.session[‘k1’]=123设置session

request.session.setdefault[‘k1’,123]存在则不设置

del request.session[‘k1’]删除

request.session.clear()删除

 

所有的键、值、 键值对

request.session.keys()

request.session.values()

request.session.items()

request.session.iterkeys()

request.session.itervalues()

request.session.iteritems()

 

用户session的随机字符串

request.session.session_key

 

将所有session失效日期小于当前日期的数据删除

request.session.clear_expired()

 

检查用户session的随机字符串在数据库中是否存在

request.session.exists(‘session_key’)

 

删除当前用户的所有session数据

request.session.delete(‘session_key’)

 

request.session.set_expiry(value)

 

默认的过期时间是两周,如果自己设置过期时间,这样自己设定的优先级就会高于默认的。

如果value是个整数,session会在些秒数后失效。

如果value是个datatime或者timedelta,session就会在这个时间后消失。

如果value是0,用户关闭浏览器session就会消失。

如果value是none,session会依赖全局session失效策略。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值