如果你淋雨,我就不打伞

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