cookie和session的操作

一、Cookie

原理:客户端浏览器上的一个文件,多个”键值对“的字典形式

新增:
  res = redirect('/index/')
  res.set_cookie('username',u) 设置cookie的一个属性为username,值为u
查询
  对应index视图函数中
  v = request.COOKIES.get('username') 获取这个属性看有没有值
  if not v:
    return redirect('/login/') #没有cookie就会转到登陆页面
    return render(request,'index.html',{'current_user':v})


基于cookie实现用户登陆

request.COOKIES
request.COOKIES['user']
request.COOKIES.get('')

response = redirect 返回内容
response = render

response.set_cookie('key','value') 要返回的时候设置cookie
return response

key, 键
value='', 值
max_age=None, 超时时间
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
import datatime
current_data = datatime.datetime.utcnow() 当前时间
current_data = current_data + datatiem.timedelta(seconds=5)延迟

path='/', Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

 



基于cookie实现定制显示数据条数

function changePageSize(ths) {
var v = $(ths).val()
{#console.log(v)#}
$.cookie('per_page_count',v) jQuery的cookie插件,使得能够这样设置cookie值
location.reload()
}

 


注:ajax获取cookie值:$.cookie('key')


val = request.COOKIES.get('per_page_count') 视图中获取cookie赋值给函数


11.带签名的cookie

obj.set_signed_cookie('','',salt='')
request.get_signed_cookie('username',salt='')

 

二、Session

保存在服务器端的一个键值对(数据库、缓存、内存),依赖于cookie

session = {
asdasdasd:{....}, 每个用户一个键值对,保存信息,键唯一,值是字典,包含很多键值对
asdasdasd:{....},
}

 



原理:生成随机字符串,写到用户浏览器cookie,再保存到session中,在随机字符串对应的字典设置内容。
获取时,获取session键值对即可。
生成session

request.session['username'] = u 
request.session['is_login'] = True

 

获取session
if request.session['is_login']:

===================session的使用=============================

# 获取、设置、删除Session中数据
request.session['k1'] #不存在会报错
request.session.get('k1',None)

request.session['k1'] = 123 #已存在值会覆盖掉,不存在会创建 
request.session.setdefault('k1',123) # 存在则不设置

del request.session['k1']
request.session.delete("session_key")
request.session.clear() 先获取该用户随机字符串,再delete,如注销

# 所有 键、值、键值对 ,类似字典操作
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()

# 用户session的随机字符串
request.session.session_key

# 将所有Session失效日期小于当前日期的数据删除,用于清理脏数据
request.session.clear_expired()

# 检查 用户session的随机字符串 在数据库中是否存在
request.session.exists("session_key")

request.session.set_expiry(value) #默认两周
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。


============session的配置=======================

SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)

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,默认修改之后才保存(默认)
# 在已登录状态访问页面中时,session会一直更新过期时间

能存放session的地方

数据库(默认)
缓存    
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),
此处别名依赖缓存的设置
文件    
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None 
# 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()    

缓存+数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎

加密cookie    
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎

 





posted @ 2018-07-28 15:26  心平万物顺  阅读(210)  评论(0编辑  收藏  举报