cookie是存贮在本地浏览器的一些数据,这些可以数据一般与访问网站有关,比如大家时常访问某些网站,登录时会进行用户验证,验证成功后本地cookie可以存储一些数据,比如一个字符串,下一次用户在访问网站时,可以带着cookie中的这个字符串,网站服务器在请求中,找到这个字符串则认为用户已经登录,无须再次登录。cookie常备用来做用户验证已经多长时间免登录的操作,在django中,也有cookie的功能。如下
def login(request):
if request.method=='POST':
user_name=request.POST.get('name')
user_pwd=request.POST.get('password')
user=models.user.objects.filter(name=user_name)
if len(user)==0:
return redirect('/login/')
else:
user=user.first()
if user.password==user_pwd:
res=redirect('/home/')
res.set_cookie('current_user',user_name)
res.set_cookie('script','<script>$(.</script>')
#设置cookie键值对 设置cookie
return res
else:
return redirect('/login/')
else:
return render(request,'login.html')
另外在另一端验证的时候则需要在cookie中取值。
def home(request):
current_user=request.COOKIES.get('current_user','请登录')
#通过cookie取值
if current_user=='请登录':
return render(request,'home.html',{'current_user':current_user})
else:
return render(request,'home2.html',{'current_user':current_user})
session与cookie相比更适合放一些私密的东西,session存储在服务器端。用户登录网站成功时,session会生成一个随机字符串,并将这个随机字符串保存在session中,在session内部生成一个键值对,其中以随机字符串为健,用户信息为对应的值。同时也会将随机字符串返回用户,用户将随机字符串存放在cookie里,下次用户登录cookie携带随机字符串,session通过随机字符串找到相对应用户信息进行用户验证。
在django中,上述这些已经为大家封装好,大家只需要调用就好如下。
def login(request):
if request.method=='POST':
user_name=request.POST.get('name')
user_pwd=request.POST.get('password')
user=models.user.objects.filter(name=user_name)
if len(user)==0:
return redirect('/login/')
else:
user=user.first()
if user.password==user_pwd:
#session设置值
request.session['user']=user_name
request.session['is_login']=True
res=redirect('/home/')
return res
else:
return redirect('/login/')
else:
return render(request,'login.html')
session取值
def home(request):
if request.session.get('is_login',None):
return render(request,'home.html')
else:
return render(request,'home2.html')
其中session取值时,request.session[‘is_login’]也可以取值,但是这个有一个隐患,也就是如果session中没有这个值则会报错。相对应情景为用户还从没有登录而我们去取用户信息,则取不到。而用get()则可以设置默认值,即取不到值得默认值。
此外cookie session也可以设置超时时间等。