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' # 引擎