Django学习笔记(5):Cookie和Session

爱⌒轻易说出口 提交于 2020-02-25 20:13:50

1.状态保持:Cookie

HTTP协议是无状态的,下一次访问一个页面时并不知道上一次对这个页面进行了怎样的操作。
Cookie是基于web安全的。
如何设置Cookie:需要一个HttpResponse对象或他子类的对象(HttpResponseRedirect,JsonResponse),其有一个set_cookie方法。

Cookie是一个字典。

示例:
views.py

def set_cookie(request):
    response = HttpResponse('set_cookie')
    response.set_cookie('num',1)
    return response

def get_cookie(request):
    num = request.COOKIES['num']
    return HttpResponse(num)

在这里插入图片描述
Cookie是有时间的,若不设置过期时间,默认在浏览器关闭后就会删除。
设置过期时间为两周之后

response.set_cookie('num',1,max_age=14*24*3600)
response.set_cookie('num', 1, expires=datetime.now()+timedelta(days=14))

2.状态保持:Session

Session保存在服务器端
1.首次访问:进行处理,设置session信息(通过request.session),生成django_session表

session_key session_data
唯一的标识码 {‘usename’:‘admin’,‘password’:‘19990713’}

特点:以键值对进行存储,依赖于cookie,session也有过期时间,如果不指定,默认两周就会过期。
2.服务器设置一个cookie,sessionid,并返回应答,让浏览器保存一个sessionid(唯一标识码)
3.浏览器再次访问网站时,根据seesionid取出对应的session信息。
保存在request.session

设置:

request.session['username']='admin'

获取

request.session['username']

演示实例:

def set_session(request):
    request.session['username']='admin'
    request.session['age']=18
    return HttpResponse('set session')

def get_session(request):
    username = request.session['username']
    age = request.session['age']
    return HttpResponse(username+":"+str(age))

在这里插入图片描述
数据库汇中存的session_data经过了base64加密,解密后为:

cf892bfcec604b2e39fb3b6cb9f8f8c46178a29a:{"username":"admin","age":18}

在这里插入图片描述

request.session对象常用方法

request.session.clear():清除所有session中存储值的部分(大括号里的所有内容)
request.session.flush():删除整条数据
del request.session['key'] 删除session中指定的键及值
request.session.set_expiry(value):设置session_id cookie的过期时间,以秒为单位,会在cookie没有活动后该时间后过期,为0则关闭浏览器时过期。

3.案例:记住用户的登录状态

def login_ajax_check(request):
    username = request.POST.get('username')
    password = request.POST.get('password')
    remember = request.POST.get('remember')
    if remember=='on':
        reponse = HttpResponse()
        reponse.set_cookie({'username',username})

    #remember login status
    request.session['islogin'] = True
    if (username == "admin" and password == "19990713"):
        return JsonResponse({'res':1})
    else:
        return JsonResponse({'res':0})
        
def login(request):
    #judge login status
    if request.session.has_key('islogin'):
        return redirect('/index')
    else:
        return render(request, 'booktest002/login.html')

4.cookie和session的应用场景

cookie:记住用户名,安全性要求不高。
session:涉及到安全性要求比较高的数据,银行卡账户、密码。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!