### 11.10 cookie和session
#### 11.10.1 cookie
定义:保存在浏览器本地上的一组组键值对
为什么有cookie?
- http协议是无状态的,每次http请求都是对立的,相互之间没有关联,yongcoolie保存状态
特点:
1. 由服务器让浏览器进行设置的
2. 浏览器保存在浏览器本地
3. 下次访问的时候自动携带
4. 应用场景:登录、保存浏览器习惯、简单的投票
django中操作cookie
设置:
```python
ret = redirect('index')
ret.set_cookie('key','value',max_age=1000,path='/') #没有加盐的
ret.set_signed_cookie('is_login','1','liujia') #加盐
```
获取
```python
request.COOKIES.get()
request.COOKIES[]
request.COOKIES{} #未加盐的获取方式
is_login = request.get_signed_cookie('is_login',salt='liujia',default='')#加盐的获取方式
```
删除
```python
ret = redirect('/login/')
ret.delte_cookie('is_login')
```
#### 11.10.2 session
定义:保存在服务器上的一组组键值对(必须依赖cookie)
为什么要有session
- cookie保存在浏览器本地,不安全
- 大小个数受到限制
django中操作session
```python
request.session[key]=value
#获取
request.session[key] request.session.get(key)
#查看session的全部配置
from django.conf import global_settings
#将所有session失效日子小于当前日期的数据删除
request.session.clear_expired()
#检查回话session的key在数据库中书否存在
request.sessin.exists('session_key')
#删除当前会话的所有session数据 删除session的数据 不删除cookie
request.session.delete()
#删除当前的会话数据并删除会话的cookie 删除session的数据 删除cookie
request.session.flush()
这用于确保前面的绘画数据不可以再次被用户的浏览器访问
例如:django.contrib.auth.logout() 函数中就会调用它
#设置会话数据和cookie的超时时间
request.sessiont_exirpy(value)
```
###