美文网首页
day5 cookie和session 2018-08-10

day5 cookie和session 2018-08-10

作者: 十二右 | 来源:发表于2018-08-13 18:56 被阅读0次

1. cookie 和 session

HTTP 协议是一个""无法保持状态""的协议,如果需要"保持状态''记录用户的登录状态,使用服务端产生的cookie 和session :

  • 初次发送请求 : 登录成功后
    浏览器中 : cookie 记录一串随机数sessionid,cookie安全性差,容易被截取和串改,不保存重要信息
    服务器中 : session 记录同一串随机数sessionid ,同时记录用户的基本信息(私密 : username & password & others)
  • 再次发送请求: 匹配cookie 和session中的随机数,服务器就可以确认登录人身份(who you are)

F12 查找cookie的值(随机数)

image.png

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编码 - 具有不可读性,需要解码后才能阅读

image.png

3. 验证用户登录信息

  1. 导入模块 : from django.contrib import auth
  2. 校核 :
if request.method == 'POST':
       username = request.POST.get('username')
       password = request.POST.get('password')
       # 验证用户名和密码是否正确
       user = auth.authenticate(request,
                         username=username,
                         password=password,
                         ) 
  1. 登录(该用户个人页面) : auth.login(request, user)
  2. 退出 : 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)

相关文章

网友评论

      本文标题:day5 cookie和session 2018-08-10

      本文链接:https://www.haomeiwen.com/subject/yzzhbftx.html