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
:涉及到安全性要求比较高的数据,银行卡账户、密码。
来源:CSDN
作者:Zijeak
链接:https://blog.csdn.net/qq_18404993/article/details/104473008