Django --操作cookie和session

cookie机制

cookie是服务器传给客户端的体积很小的纯文本文件。客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器发一个cookie。客户端浏览器会把cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该cookie一同提交给服务器。服务器检查该cookie,以此来辨认用户状态。

Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。要跟踪该会话,必须引入一种机制。

Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。

 

Django中操作cookie

首先获取一个response对象,再此对象上对cookie进行操作

 设置及cookie:response.set_cookie(

        (1)key"cookie名称", (2)value"cookie对应的值",

        (3).max_age 以秒为单位, expires 具体过期时间(make_aware), 如果都设置, 以expires为准
        (4).path, 对域名下那个路径有效, 默认对域名下的所有路径都有效
        (5).domain, 针对那个域名有效, 默认针对主域名下都有效, 如果只要针对哪个子域名有效, 可以设置这个属性
        (6).secure, 默认是False, 如果设置为True, 则只能在https协议下才可用
        (7).httponly 默认是False, 如果为True, 则在客户端不能通过Javascript进行操作)

删除cookie:response.delete_cookie(key)
获取cookie:request.COOKIES.get(key)

 

cookie看似解决了HTTP(短连接、无状态)的会话保持问题,但把全部用户数据保存在客户端,存在安全隐患,

于是cookie+session出现了!我们可以 把关于用户的数据保存在服务端,在客户端cookie里加一个sessionID(随机字符串),

基于以上原因:cook+session组合就此作古了单单使用cookie做会话保持的方式;

 


session的概念和机制

除了使用cookie,web应用程序中还经常使用Session来记录客户端状态。session是服务器端使用的一种记录客户端状态的机制,使用上比cookie简单一些,相应的也增加了服务器的存储压力。

什么是session

session是另一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是session。客户端浏览器再次访问时只需要从该session中查找该客户的状态就可以了。

如果说sookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么session机制就是通过检查服务器上的“客户明细表”来确认客户身份。session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

Django中操作session  

request.session.get(session_id)  获取session

request.session.pop(session_id)  弹出删除一个session

request.session.keys()  获取当前所有session的键

request.session.items()  获取当前所有session的键值  

request.session.clear()  清除当前用户的浏览器中所有session数据
request.session.flush()  删除数据表中的session并且删除在浏览器中存储的session_id, 一般在注销时用的较多
request.session.set_expiry(整数表示秒数, 0表示浏览器关闭session过期, None表示使用全局session配置, 一般为两周,
                在settings中可以设置SESSION_COOKIE_AGE可以配置全局过期时间)
request.session.clear_expired()清除过期session   或者执行  python manage.py clearsessions

 

2、cookie+session的工作流程:

(1)、当用户来访问服务端时,服务端生成一个随机字符串;

(2)、当用户登录成功后 把 {session_id :随机字符串} 组织成键值对 加到 cookie里发送给浏览器;

(3)、服务器以发送给客户端 cookie中的随机字符串做键,用户信息做值,保存用户信息;
(4)、cookie保存在浏览器端,session保存在服务器端,但是为了区分不同的客户端,服务器会在浏览器中发送一个对应的sessionid保存到cookies中,下次浏览器请求服务器的时候会将sessionid一并发送给服务器。所以session机制依赖于cookie机制。

 

session注意事项

(1)、每个用户的保存在 服务端的sessionID保存在数据库里的 sessionID隔离不一样的,不会造成用户间的信息混淆!

(2)、如果用户的cookie泄露了,别人拿着你的cookie也是可以 访问服务端的,所以cookie一定要保存好。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值