Django的Cookie和Session学习

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
'''
  1. 用户登录到管理后台之后 就会生成一个 session_key == session_id
  2. 后面的每一次登录请求都会把sessionid带上
  3. 服务器会根据sessionid 去数据库表格中查询 session_key
  4. 通过session_key 找到 user_id
  5. 再通过 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) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值