cookie与session
cookie与session
cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生。
cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”了。
通过session实现用户认证
cookie 是牌牌,是一个允许服务器在这个上面写内容的一个容器{};保留在客户端(浏览器)
session 是小本子,是记录哪个牌牌对应哪个值的载体容器;保留在服务器上的一个容器,可以是关系型数据库,也可以是非关系型数据库或者文本中;
# 默认将 session 写在表 django_session 中;
0.urls.py设置
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
url(r'^index/', views.index),
url(r'^logout/', views.log_out),
]
1.models.py设置
from django.db import models
class UserInfo(models.Model):
name = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)
2.views.py设置
from django.shortcuts import render,HttpResponse,redirect
# Create your views here.
from app01 import models
def login(request):
if request.method == "POST":
username = request.POST.get("user")
password = request.POST.get("pwd")
# 将获取的值,在数据库做对应比较,如果匹配
ret = models.UserInfo.objects.filter(name=username,pwd=password)
if ret:
# 匹配给 session 绑定相应的值
request.session["is_login_lin"]=True
# 定义 session 值
request.session["name"]=username
return redirect("/index/")
else:
return redirect("/login/")
return render(request, "login.html")
def index(request):
# 判断 定义的 request.session 中是否有 is_login_lin
if not request.session.get("is_login_lin"):
# 没有直接返回到登录页面
return redirect("/login/")
name = request.session.get("name")
# 有登录信息,将页面跳转至 index.html
return render(request,"index.html",locals())
def log_out(request):
# 注销使用 request.session.flush()
request.session.flush()
return redirect("/login/")
3.index.html和login.html设置
登录页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login/" method="post">
{% csrf_token %}
<p>姓名:<input name="user" type="text"></p>
<p>密码:<input name="pwd" type="text"></p>
<input type="submit">
</form>
</body>
</html>
首页:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎你 {{ name }}</h1>
<a href="/logout/">注销</a>
</body>
</html>