什么是cookie
cookie是浏览器的技术,cookie指一小段信息,它是服务器发送出来,存储在浏览器上的键值对,可以理解为服务端给客户端的一个令牌,下次访问服务器时浏览器会自动带上这块令牌,以便服务器提取有用信息
原理:
浏览器访问服务器时,带有一个空的cookie,服务器产生内容,浏览器收到这个产生的值后保存在本地,当浏览器再次访问服务器时会自动带上这个有值的cookie,这样服务器就能知道这次访问的是谁了。cookie在这里相当于身份证,第一次时,先给你办个身份证,下次再次访问就知道是谁来了。
cookie 与HTTP头
cookie是通过HTTP请求和响应在客户端和服务端传递的。
cookie 请求头,客服端发送给服务端
格式: cookie: a =A; b=B; c=C.
如果发送多个cookie,后面的cookie会覆盖先发的cookie
Django中操作cookie
获取cookie
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
参数:
default: default value
salt: 加密盐
max_age: 后台控制过期时间
设置cookie
rep = HttpResponse()
rep = render(request,'')
rep.set_cookie(key, value)
rep.set_signed_cookie(key, value, salt='‘,max_age=None,)
参数:
key:key
value:value
max_age=None,
path='/', cookie生效的路径,/根路径,要路径的cookie表示可以被任何url页面访问
domain =none, 生效的域名
secure=False, https传输
httponly=False ,只能http协议传输,无法被js获取
删除cookie
def logout(request):
rep = redirect('/login/')
rep.delete_cookie('user')
return rep
session
cookie在一定程度上解决了 保持状态 的需求,但是由于cookie本身最大支持4096字节,且保存在客户端,可能被拦截或者窃取。 需要更多的字节,并且保存的服务器,这就是session.
这里cookie就起到了桥接的作用,通过给每个客户端分配一个唯一的id,保存在cookie中,然后根据这个唯一的id,在服务器在上保存一段时间的私密资料。比如账号密码等。
在Django中操作session
获取,设置,删除session
取值:
request.session['k1']
request.session.get('k1',None)
reqeust.session帮你从cookie里面将sessionid的值取出来,这个值在数据库的session表中,session-data字段的数据拿出来,并解密, 然后通过['k1']或者get()方法取出其中保存的字段的值
删除值:
del request.session['k1'] django-session表里面同步删除。
其他操作:所有键值对
request.session.keys()
reqeust.session.values()
request.session.items()
session_key = request.session.session_key # sessionid
request.session.clear_expired() # 将过期的删除
request.session.exists('session_key') # 查看某个key是否存在于数据库中
request.session.flush() # 删除当前的会话数据并删除cookie, 删除session中这个会话记录
request.session.set_expiry(value)
value
整数:指定秒数后失效
datetime, timedelta, 这个时间后失效
0 关闭浏览器后失效
None 依赖全局session失效策略
Django中session的配置
1. 数据库Session
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
2. 缓存Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
3. 文件Session
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
4. 缓存+数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
5. 加密Cookie Session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
其他公用设置项:
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_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
jquery 操作cookie
定义:让网站服务器把少量数据存储到客户端硬盘或内存。
jquery.cookie.js基于jquery, 必须先引入jquery.
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.cookie.js"></script>
添加一个cookie
$.cookie('the_cookie', 'the_value');
这里没有设置cookie有效时间,所创建的cookie有效期默认到用户关闭浏览器为止。
创建一个cookie并设置有效时间为7天
$.cookie('the_cookie','the_value',{expires:7}); 单位为7天
创建一个cookie并设置cookie的有效路径
$.cookie('the_cookie','the_value', {expires:7, path:'/'});
读取cookie
$.cookie('the_cookie');
删除cookie
$.cookie('the_cookie',null); 将cookie值设置为null
可选参数
expires: 设置一个整数时,单位是天,也可以设置一个日期对象
path: 创建cookie的页面的路径
domain: 创建该cookie的页面域名
secure: 如果设为true,那么此cookie的传输会要求一个安全协议,如https