Django-COOKIE与SESSION


title: Django-COOKIE与SESSION
copyright: true
top: 0
date: 2019-07-11 22:32:22
tags:
categories: WEB 后端框架
permalink:
password:
keywords:
description: Django中保持会话,通过cookie和session实现。

如果你淋雨,我就不打伞

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,那么会话永不过期。

两者区别

  1. cookie和session都是会话技术,cookie是运行在客户端,session是运行在服务器端。
  2. cookie由大小限制以及浏览器在存cookie的个数也是有限的,session是没有大小限制和服务器的内存大小有关。
  3. cookie由安全隐患,通过拦截或本地找到cookie后可以进行攻击。
  4. session是保存子服务器端上,存在一段时间才会消失,如果session过多会增加服务器的压力。

参考资料 1

参考资料 2

欢迎关注公众号:【安全研发】获取更多相关工具,课程,资料分享哦~
在这里插入图片描述

你可能感兴趣的:(后端,原创作品,session,cookie,python,web,django)