Django-会话技术-Cookie和Session

会话技术
出现场景:
1、服务器如何识别客户端
2、Http在Web开发中都是短连接
请求生命周期:
1、从Request开始
2、到Response结束
种类:
1、Cookie
2、Session
3、Token

Cookie
本质是存储在客户端的键值对
支持过期时间,默认Cookie会自动携带
Cookie不支持中文

设置Cookie:

def set_cookie(request):
    response = HttpResponse('设置Cookie')
    response.set_cookie('username', 'Rock') # 'username'作为键,'Rock作为值'
    return response

获取Cookie的值:

def get_cookie(request):
    username = request.COOKIES.get('username')
    return HttpResponse(username)

一个简单的登录页面(基于Cookie)
思考:

  • 首先有一个登录界面
    • 页面中有输入框可供输入用户名和密码
    • 有一个登录按钮
  • 点击登录后,页面进入到个人中心
  • 个人中心显示用户名
    login.html 如下:
<body>
<form action="{% url 'app:login' %}" method="post">
    {% csrf_token %}
    <p>用户名:<input type="text" placeholder="请输入用户名" name="uname"></p>
    <p>密码:<input type="password" placeholder="请输入密码" name="pwd"></p>
    <button>登录</button>
</form>
</body>

个人中心页面 mine.html 如下:

<body>
<h1>欢迎登录,{{ uname }}</h1>
</body>

后台视图函数做验证,如果用户名和密码正确,则登录成功,设置cookie,然后跳转到个人中心页面。如果登录失败,则显示用户名或密码错误。
views.py 如下:

def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    else:
        username = request.POST.get('uname')
        password = request.POST.get('pwd')

        if username == 'lxyker' and password == '123456':
            response = redirect('app:mine')
            response.set_cookie('uname', username)
            response.set_cookie('pwd', password)
        else:
            response = HttpResponse('用户名或密码错误')
        return response


def mine(request):
    uname = request.COOKIES.get('uname')
    if uname:
        return render(request, 'mine.html', {'uname': uname})
    else:
        return redirect('app:login')

cookie过期时间
cookie默认关闭浏览器立即过期,不能跨浏览器

  • max_age
# cookie在60秒后过期
response.set_cookie('uname', username, max_age=60)

加盐:

  • set_signed_cookie()
  • get_signed_cookie()
# 加盐 'hahaha' 就是加入的盐
response.set_signed_cookie('uname', username, 'hahaha')

获取时,要用相应的盐才能获取到数据:

uname = request.get_signed_cookie('uname', salt='hahaha')

删除cookie:

response.delete_cookie('uname')

Session

  • 服务端会话技术
  • 本质是存储在服务端的数据
  • 默认存储在内存中
  • Django会把Session持久化到数据库中
  • 主键是字符串
  • 数据使用了数据安全
    • 使用base64
    • 在前部添加了一个混淆串
  • Session依赖于Cookie

Session存储:

request.session['username'] = uname

获取session:

username = request.session.get('username')

过期时间:
Django中Session的默认过期时间是14天

账户退出:
删除Cookie中的sessionid

response.delete_cookie('sessionid')

删除Session:

del request.session['username']

删除Cookie和Session(这种方法无垃圾数据):

request.session.flush()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值