学习目标:
了解cookie与session的基本原理,明确他们的使用原则,能够用他们进行各种用户验证与用户信息存储等功能。学习内容:
1、 cookiea、基本原理
客户端浏览器上的一个文件
{"k": "dsasd"}
b、服务器端创建cookie
res = redirect("/index/")
res.set_cookie("key","value")
res.set_signed_cookie("key","value",salt="sdagduya")
request.COOKIES.get("key")
request.COOKIES.get_signed_cookie("key",salt="sdagduya")
参数:
-默认关闭浏览器cookies失效
-max_age() 设置超时时间,以秒为单位
-expires() 设置超时时间(IE requires expires, so set it if hasn't been already
),以date时间为期限
-path="/" Cookie生效的路径,/表示根路径,特殊的:根路径的cookies可以被任何的URL页面访问
-domain=None Cookie生效的域名
-secure=False https传输
-httponly=False 只能HTTP协议传输,无法被JavaScript获取(不是绝对,底层抓包可以被获取也可以被
覆盖)
2、 session
基于cookie做用户验证时:敏感信息不适合放在cookie中
a. session原理
cookie是保存在用户浏览器端的键值对
session是保存在服务器端的键值对
b. cookie和session的对比
c. session配置(缺少cache)
- 通用配置
settings配置
SESSION_COOKIE_NAME = "sessionid" # session的cookie在保存在浏览器上时的key名
SESSION_COOKIE_PATH = "/" # session的cookie保存路径
SESSION_COOKIE_DOMAIN = None # session的cookie保存域名
SESSION_COOKIE_SECURE = False # 是否HTTP传输cookie
SESSION_COOKIE_HTTPONLY = True # 是否session的cookie只支持HTTP传输
SESSION_COOKIE_AGE = 1209600 # session的cookie失效日期(两周)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得session失效
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存session
- 引擎配置
session数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
session缓存
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'
session文件
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
SESSION_FILE_PATH = os.path.join(BASE_DIR,"cache")
session缓存加数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.cache_db'
session加密cookie
SESSION_SAVE_EVERY_REQUEST = True
CACHES = {
'default':{
'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION':[
'172.19.26.240:11211',
'172.19.26.242:11211',
]
},
'default1':{
'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION':[
'172.19.26.240:11211',
'172.19.26.242:11211',
]
},
}
d. 示例:实现两周自动登录
- request.session.set_expiry(60*10)
- SESSION_SAVE_EVERY_REQUEST = True
e. session操作
1)、获取
request.session["k"]
request.session.get("k",None)
2)、设置
request.session["k"] = 123
request.session.setdefault("k",123) #存在则不设置
3)、删除
del request.session["k"]
4)、所有键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
5)、用户session的随机字符串
request.session.session_key
6)、将所有session失效日期小于当前日期的数据删除
request.session.clear_expired()
7)、检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key")
8)、删除当前用户session的所有session数据
request.session.delete("session_key")
request.session.clear()
9)、设置超时时间(默认是两周后失效)
request.session.set_expiry(value)
如果value是一个整数,那就是在这些秒之后失效
如果value是一个datetime或timedelta,session会在这个时间之后失效
如果value是0,session会在关闭浏览器之后失效
如果value是None,session会依赖全局session失效策略
PS:
cookie中不设置超时时间,则表示关闭浏览器自动清除
3、 分页(自定义的分页)XSS
a. {{ page_info|safe }}
b. mask_safe(page_info) #from django.utils.safestring import mark_safe