如果你淋雨,我就不打伞
COOKIE
设置Cookie
def index(request):
response =HttpResponse('ok')
response.set_cookie('user', 'langzi', expires=60 * 60 * 24 * 7,httponly=True)
# 设置cookie的值 user:langzi,有效期60s*60*24*7 即一个礼拜,设置httponly防止xss盗取cookie
return response
获取Cookie
def index(request):
if 'user' in request.COOKIES:
user = request.COOKIES.get('user')
return HttpResponse(user)
删除Cookie
def index(request):
response = HttpResponse('ok')
if 'user' in request.COOKIES:
response.delete_cookie('hello')
return response
SESSION
服务器端的会话技术,基于cookie,把数据保存到服务端
设置session
def index(request):
request.session["username"] = 'langzi'
request.session.set_expiry(10)
# 设置超时时间
获取session
def index(request):
if request.session.get("username",None):
# 尝试获取session中username属性,如果没有则将取None
current_user = request.session["username"]
# 获取到数据
删除session
def index(request):
request.session.clear()
一些设置
在settings.py文件
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,默认修改之后才保存(默认)
设置会话的超时时间
request.session.set_expiry(value)
如果value是一个整数,会话将在value秒没有活动后过期。
如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
如果value为None,那么会话永不过期。
两者区别
- cookie和session都是会话技术,cookie是运行在客户端,session是运行在服务器端。
- cookie由大小限制以及浏览器在存cookie的个数也是有限的,session是没有大小限制和服务器的内存大小有关。
- cookie由安全隐患,通过拦截或本地找到cookie后可以进行攻击。
- session是保存子服务器端上,存在一段时间才会消失,如果session过多会增加服务器的压力。