Cookie和Session
设置Cookie
设置cookie是设置值给浏览器的。因此我们需要通过response的对象来设置,设置cookie可以通过response.set_cookie来设置,这个方法的相关参数如下:
key:这个cookie的key。
value:这个cookie的value。
max_age:最长的生命周期。单位是秒。
expires:过期时间。跟max_age是类似的,只不过这个参数需要传递一个具体的日期,比如datetime或者是符合日期格式的字符串。如果同时设置了expires和max_age,那么将会使用expires的值作为过期时间。
path:对域名下哪个路径有效。默认是对域名下所有路径都有效。
domain:针对哪个域名有效。默认是针对主域名下都有效,如果只要针对某个子域名才有效,那么可以设置这个属性.
secure:是否是安全的,如果设置为True,那么只能在https协议下才可用。
httponly:默认是False。如果为True,那么在客户端不能通过JavaScript进行操作。
def CookiesTese(request):
ret = HttpResponse("CookiesTese")
# 删除cookies
ret.delete_cookie('cookie1')
# 设置cookies
ret.set_cookie('cookie1', 'value1',max_age=60)
ret.set_cookie('cookie2', 'value2')
# 获取cookies
get_cookies = request.COOKIES
print(get_cookies)
return ret
设置seesion
django中的session默认情况下是存储在服务器的数据库中的,在表中会根据sessionid来提取指定的session数据,然后再把这个sessionid放到cookie中发送给浏览器存储,浏览器下次在向服务器发送请求的时候会自动的把所有cookie信息都发送给服务器,服务器再从cookie中获取sessionid,然后再从数据库中获取session数据。但是我们在操作session的时候,这些细节压根就不用管。我们只需要通过request.session即可操作。
get:用来从session中获取指定值。
pop:从session中删除一个值。
keys:从session中获取所有的键。
items:从session中获取所有的值。
clear:清除当前这个用户的session数据。
flush:删除session并且删除在浏览器中存储的session_id,一般在注销的时候用得比较多。
set_expiry(value):设置过期时间。
整形:代表秒数,表示多少秒后过期。
0:代表只要浏览器关闭,session就会过期。
None:会使用全局的session配置。在settings.py中可以设置SESSION_COOKIE_AGE来配置全局的过期时间。默认是1209600秒,也就是2周的时间。
clear_expired:清除过期的session。Django并不会清除过期的session,需要定期手动的清理,或者是在终端,使用命令行python manage.py clearsessions来清除过期的session。
def SeesionTest(request):
ret = HttpResponse("SeesionTest")
request.session['seesion'] = 'xiao8'
request.session['seesion1'] = 'xiao81'
request.session['seesion2'] = 'xiao82'
import pdb
pdb.set_trace()
# 如果设置成0,那么浏览器关闭后,session就会过期
# request.session.set_expiry(0)
return ret
'''
session_key:
xf1w0otv249l8vcen8esct0uelcm9sow
session_data:
.eJxVjkEOgyAQRe_CuiGAIOKy-56BDDJW2kYa0cSm6d0LicZ2N3n__5d5EwvLPNgl4WSDJy3h5PTLHHR3HEvgbzBeI-3iOE_B0VKhW5roJXp8nLfun2CANOR17aUGgcIwnk_jhZMMPBcaDWiNjaorJpgzFePYMaakaZQUDozqfe-hztKEmEIcs2wNEJuD8B3xg4mdifJOwlSgxfUZphdp2ecLZfBQpA:1tXJg6:iiKV-4NErkwRYrRWtm6A11eZoqikStb2niP5YtWXWgk
.eJxVjDsOgzAQRO_iOrLWxh-cMj1nsNbsEpNEtoShinL3gESRdKN5b-YtIm5rjlvjJc4krkKJy2-XcHxyOQA9sNyrHGtZlznJQ5EnbXKoxK_b6f4dZGx5XzsyHjXrAGqPgXQygKS054Dec29dBxpS6EDxCGBN6K3RCYOdaCJ04vMFwwk3Og:1tXJbM:V31_c_LRECw7mdyPBhA5sHuO0Rf5PJlDP45LsYirYL0
'''
- 用户登录到管理后台之后 就会生成一个 session_key == session_id
- 后面的每一次登录请求都会把sessionid带上
- 服务器会根据sessionid 去数据库表格中查询 session_key
- 通过session_key 找到 user_id
- 再通过 user_id 查询到对应的用户数据转换成 request.user
设置session后会修改数据库中的session_data ,可以查看设置session前后两次session_data不一样,也可以通过pdb调试工具request.session[<key值>"]查看
(Pdb) p request.session['seesion1']
'xiao81'
(Pdb) p request.user.username
'root'
(Pdb)