一、Cookie

Cookie具体指一小段信息,它是服务器发送出来存储在浏览器上的一组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。

Cookie的特性

1、服务器让浏览器进行设置的

2、保存在浏览器本地,浏览器也可以不保存

3、下次访问自动携带cookie保存的信息

操作Cookie 

(1) 设置cookie

response.set_cookie(key,value)

(2) 获取cookie

request.COOKIES.get(key)

(3) 设置cookie的时候可以添加一个超时时间

response.set_cookie('userid', '2',max_age=7*24*300,expires=7*24*300)

max_age, expires两者都是设置超时时间的 并且都是以秒为单位需要注意的是 针对IE浏览器需要使用expires  

(4) 手动删除cookie(注销功能)

response.delete_cookie('userid')

二、Session

保存在服务器上的一组组键值对,必须依赖于Cookie

为何使用Session

1、cookie保存在浏览器本地不安全,

2、cookie的大小收到限制

操作Session

(1) session数据是保存在服务端的,给客户端返回的是一个随机字符串

#客户端

sessionid:随机字符串

 (2)设置session 

request.session['key'] = value

1.django内部会自动帮你生成一个随机字符串2.django内部自动将随机字符串和对应的数据存储到django_session表中        2.1先在内存中产生操作数据的缓存        2.2在响应结果django中间件的时候才真正的操作数据库3.将产生的随机字符串返回给客户端浏览器保存 

(3)设置过期时间

request.session.set_expiry(7*24*300)

 源码: 

 括号内可以放四种类型的参数

integer 整数 : 多少秒

datetime日期对象 : 到指定日期就失效

0 : 一旦当前浏览器窗口关闭立刻失效

不写 : 失效时间就取决于django内部全局session默认的失效时间

(4) 获取session

request.session.get('key')

(5) 清除session

session_key=request.session.session_key

request.session.delete(session_key)

request.session.delete() # 只删服务端的 客户端的不删

三、登录中应用cookie和session

 (1) 模型数据

from django.db import models

# Create your models here.

class UserModel(models.Model):

username=models.CharField(max_length=30,unique=True)

password=models.CharField(max_length=10)

age=models.IntegerField(default=17)

class Meta:

db_table='user'

verbose_name='用户'

verbose_name_plural=verbose_name

#记得迁移文件

 (2-1)首页

首页

首页


{% if user %}

当前登录用户:

{{ user.username }} 注销

{% else %}

注册

登录

{% endif %}

(2-2)注册页面

注册

注册


{# 表单提交#}

{% csrf_token %}

用户

密码

年龄

  (2-3)    登录页面

登录


{% csrf_token %}

用户

密码

(3)路由

urlpatterns = [

path('', index), # 默认打开首页

# 起别名

path('index/', index, name='index'),

path('login/', login, name='login'),

path('register/', register, name='register'),

path('logout/', logout, name='logout'),

path('admin/', admin.site.urls),

]

(4)视图

from django.http import HttpResponse

from django.shortcuts import render, redirect

from django.urls import reverse #路由

from user.models import *

# Create your views here.

#首页

def index(request):

#获取cookie数据

# uid=request.COOKIES.get('userid',0)

# 获取session数据

uid = request.session.get('userid', 0)

#获取登录的用户信息

user = UserModel.objects.filter(id=uid).first()

return render(request,"index.html",{'user':user})

#注册

def register(request):

#判断

if request.method=='GET':

return render(request,"register.html")

elif request.method=='POST':

#请求数据

uname=request.POST.get('username')

upass=request.POST.get('password')

age=request.POST.get('age')

print(uname,upass,age,sep='=======') #后台打印

#先判断用户是否存在

username=UserModel.objects.filter(username=uname)

if username.exists():

return HttpResponse('用户已存在!')

#添加到数据库中

try:

user=UserModel()

user.username=uname

user.password=upass

user.age=age

user.save()

except:

return HttpResponse('注册失败!')

#注册成功,直接跳到登录页面

return redirect(reverse('login'))

#登录

def login(request):

# 判断

if request.method == 'GET':

return render(request, "login.html")

elif request.method == 'POST':

# 请求数据

uname = request.POST.get('username')

upass = request.POST.get('password')

print(uname, upass, sep='=======') # 后台打印

#2.登录验证

users=UserModel.objects.filter(username=uname,password=upass)

#判断

if users.exists():

#获取数据

user=users.first()

#3.设置cookie

#跳转到首页

response=redirect(reverse('index'))

#创建cookie,设置过期时间max_age=7天

# response.set_cookie('userid',user.id,max_age=7*24*300)

# response.set_cookie('userid',user.id)

#使用session

request.session['userid']=user.id

#设置过期时间

# request.session.set_expiry(7*24*300)

return response

#注销

def logout(request):

# 跳转到首页

response = redirect(reverse('index'))

#删除cookie

# response.delete_cookie('userid')

# 删除session

session_key=request.session.session_key

request.session.delete(session_key)

#返回

return response

(5)运行

四、总结

cookie就是保存在客户端浏览器上的信息 session就是保存在服务端上的信息 session是基于cookie工作的(其实大部分的保存用户状态的操作都需要使用到cookie)

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。