• cookie,session,用户认证组件


    一. 绘画跟踪技术

      在客户端与服务端的一次会务中,多次的请求与相应,HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态。会话跟踪技术即能够实现多次回话间信息共享的作用,HTTP协议中可以使用Cookie来完成会话跟踪!在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术。 

    .cookie技术

      Cookie是浏览器的技术,当浏览器第一次访问一个网站时,发送给服务端的是一个空的cookie,如果登录成功了,服务器可以向cookie的字典中插入值,以后在一定的时间内,浏览器访问此服务端,都会带着这个cookie字典.

    Cookie语法:

    1.设置cookie

    1 Obj=Httpresponse(“ok”)
    2 Obj.set_cookie(“is_login”,True)
    3 Obj.set_cookie(“username”,”amy”)  #不写时间默认是两周
    4 Obj.set_cookie(“username”,”amy”,max_age=20) #让浏览器20秒后清除cookie获取cookie

    2.获取cookie

    1 Request.COOKIES
    2 得到的是cookie字典{“is_login”:True,“username”:”amy”}
    3 Request.COOKIES.get(“is_login”)
    4 得到的是True

    3.删除cookie

    1 Response.delete_cookie("cookie_key",path="/",domain=name)

    .session技术

      由于cookie的信息暴露在客户端,非常的不安全,而且数据量一但变大,会一定程度的影响速度,所以,出现了session,session是基于cookie,session是服务端技术

    1.设置session

    Request.session[“s_username”]=”amy”

    这句话会做三件事:

      生成一个随机字符串作为表中session-key字段的值

      向表中django_session插入数据

        Session-key session-data

        随机字符串 加密后的{“s_username”:”amy”}

      向客户端相应时,加上sessionid=刚刚生成的随机字符创

    2.获取session

    1 S_username=request.session[“s_username”]

    3.删除session

    1 Del request.session[“s_username”]

    4.Request.session.flush()

      (1) 找到钥匙

      (2) Django session表中过滤出该记录,并删除

      (3) 删除钥匙

    四. 用户认证组件

    视图函数中要使用用户认证组件需要引入auth模块

    From Django.contribute import auth

    前提:必须使用组Django提供auth_user

    插入命令:在manage.py中创建命令createsuperuser(python manage.py  createsuperuser)即为向该表中插入记录,通过此方式插入的密码是加密的,直接在表中插入密码不是加密的

     

    1.数据库中查询数据是否存在(auth_user表中)

    查询成功返回用户对象,查询失败返回none:

    auth.authenticate(username=”amy”,password=123)

    2.保存用户状态信息

    auth.login(request,user_obj)

    相当于:request.session["user_id"]=user.pk

    保存后可以使用request.user,代指当前登录对象,没有auth.login,默认是匿名对 ,requester.user是全局变量

    3.删除数据库中的记录,删除钥匙

    auth.logout(request)

    4.向auth_user表中插入数据用create_user接口,要先引入user

    from Django.contrib.auth.models import User

    User.objects.create_user(username=user,password=pwd)

    5.重置密码

    user=User.objects.get(username=request.user.username)
        user.set_password("666")
        user.save()




  • 相关阅读:
    Educational Codeforces Round 22 C. The Tag Game
    Codeforces Round #421 (Div. 1) B. Mister B and PR Shifts(技巧)
    Codeforces Round #422 (Div. 2) D. My pretty girl Noora
    Codeforces Round #422 (Div. 2) C. Hacker, pack your bags!
    hdu3756(三分)
    hihocoder1496(高维前缀和)
    AOJ731(不等式)
    UVALive7042(博弈论)
    Codeforces 284E(概率)
    hdu4778(状态压缩dp)
  • 原文地址:https://www.cnblogs.com/shanghongyun/p/9930470.html
Copyright © 2020-2023  润新知