1. cookie 和 session
HTTP 协议是一个""无法保持状态""的协议,如果需要"保持状态''记录用户的登录状态,使用服务端产生的cookie 和session :
- 初次发送请求 : 登录成功后
浏览器中 : cookie 记录一串随机数sessionid
,cookie安全性差,容易被截取和串改,不保存重要信息
服务器中 : session 记录同一串随机数sessionid
,同时记录用户的基本信息(私密 : username & password & others)- 再次发送请求: 匹配cookie 和session中的随机数,服务器就可以确认登录人身份(who you are)
F12 查找cookie的值(随机数)
2. cookie方法
2.1 设置
response.set_cookie(key, value, max_age=None, exprise=None)
返回页面时绑定cookie : 值, 随机数, 存活时间(秒), 存活时间(天)
参数定义:
max_age和exprise时间:
max_age : 整数,指定cookie过期时间,以秒为单位
exprise: 整数,指定过期时间,还支持是一个datetime或者timedelta,可以指定一个具体日期时间
设置10天后过期:exprise=datetime.datetime.now() + timedelta(days=10)
永不过期:exprise=None
2.2 获取:request.GET.get(key)
2.3 删除:request.delete_cookie(key)
3. session方法
2.1 Django中启用session: settings.py
INSTALLED_APPS: ‘django.contrib.sessions’
MIDDLEWARE: ‘django.contrib.sessions.middleware.SessionMiddleware’
每个HttpResponse对象都有一个session属性,也是一个类字典对象
2.2 常用操作
a. 设置数据 request.session[‘key'] = value
登录的时候,进行验证用户的用户名和密码是否正确,如果正确,登录
request.session['login'] = True
request.session['username'] = 'zhang'
request.session['password'] = '12345'
b. 获取值(根据键获取会话的值): request.session.get(key, default=None)
如 : username = requst.session.get('username')
获取sessionid
值 : session_key =requst.session.session_key
c. 删除值 : del requst.session['key']
如 : del requst.session['username']
删除当前用户的所有Session数据
: request.session.delete(request.session.session_key)
删除当前的会话数据并删除会话的cookie : request.session.flush()
; django.contrib.auth.logout()
函数中就会调用它。
数据存储到数据库中会进行编码使用的是base64编码 - 具有不可读性,需要解码后才能阅读
3. 验证用户登录信息
- 导入模块 :
from django.contrib import auth
- 校核 :
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 验证用户名和密码是否正确
user = auth.authenticate(request,
username=username,
password=password,
)
- 登录(该用户个人页面) :
auth.login(request, user)
- 退出 :
auth.logout(requset)
4. 其他
CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式
HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于 session 之中,然后在每次请求时把 token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,
添加csrf解决403问题,增加安全性 login.html
文件里的
<form action="" method="post"> {% csrf_token %} </form>
提交表单里添加
错误视图: 404视图(页面没有被找到 page not found) 400视图(客户端操作错误 bad request) 403视图(权限错误 403 forbidden ) 500视图(服务器内部错误 server error)
网友评论