以及cookie本身保存在客户端

COOKIE&SESSION

知识储备

澳门太陽城集团登录网址,  由于http左券不恐怕保证状态,但事实上情状,大家却又供给“保持状态”,因而cookie便是在这么二个场合下诞生。

  cookie的专门的学业规律是:由服务器发生内容,浏览器收到必要后保存在本地;当浏览器再度做客时,浏览器会自行带上cookie,那样服务器就会经过cookie的剧情来剖断这一个是“何人”了。

  cookie即便在早晚水准上解决了“保持状态”的供给,可是出于cookie自个儿最大帮衬4096字节,以至cookie本身保留在客商端,大概被阻碍或窃取,因而就须求有一种新的事物,它能支撑更加多的字节,况兼他保留在服务器,有较高的安全性。那便是session。

  难题来了,基于http左券的无状态特征,服务器根本就不知情报事人是“哪个人”。那么上述的cookie就起到桥接的法力。

  大家得以给每一种顾客端的cookie分配一个唯一的id,那样客商在拜访时,通过cookie,服务器就知晓来的人是“哪个人”。然后我们再依据不一致的cookie的id,在服务器上保留一段时间的私密资料,如“账号密码”等等。

  总计来说:cookie弥补了http无状态的缺少,让服务器知道来的人是“什么人”;可是cookie以文件的款型保留在该地,自己安全性比较差;所以咱们就因而cookie识别不相同的客商,对应的在session里保存私密的信息乃至超越4096字节的文书

Django实现COOKIE

设置cookie

obj = HttpResponse(...) 或 obj= render(request, ...) 或 obj= redirect()
obj.set_cookie(key,value,...)
obj.set_signed_cookie(key,value,salt='加密盐',...)

 

获取cookie

request.COOKIES.get('key')
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

澳门太阳集团城网址,删除cookie

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

参数

key,                 键
value='',            值
max_age=None,        超长时间
expires=None,        超长时间
path='/',           Cookie生效的路径,浏览器只会把cookie回传给带有该路径的页面,这样可以避免将cookie传给站点中的其他的应用。/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
domain=None,         Cookie生效的域名你可用这个参数来构造一个跨站cookie。如, domain=".example.com"所构造的cookie对下面这些站点都是可读www.example.com 、 www2.example.com 
和an.other.sub.domain.example.com 。
如果该参数设置为 None ,cookie只能由设置它的站点读取。

secure=False,        如果设置为 True ,浏览器将通过HTTPS来回传cookie。
httponly=False       只能http协议传输,无法被JavaScript获取
                                         (不是绝对,底层抓包可以获取到也可以被覆盖

澳门太陽城集团登录网址 1澳门太陽城集团登录网址 2

$.cookie("key", value,{ path: '/' })

jquery操作cookie

Django实现SESSION

设置Session

request.session['key']='value'
'''
实际进行的操作:
    1.  检查请求是否有sessionid,且是否存在与数据库,存在则对session_data进行更新
    2. 若不等,则创建随机字符串
    3. set_cookie('sessionid','随机字符串')
    4. 在session表中添加记录
                  session-key          session-data
                    随机字符串          {"key":"value"}-------------进行处理后的
'''

获取Session

session_name=request.session['key']
'''
实际进行了哪些操作:
    1. 取随机字符串request.COOKIE.get('sessionid')
    2. 在session表中进行过滤:
        obj=django-session.objects.filter(session-key=random_str).first()
        obj.session-data.get("user")

'''

其他

#删除Sessions值
del request.session["session_name"]
#检测是否操作session值
if "session_name" is request.session:

配置

澳门太陽城集团登录网址 3澳门太陽城集团登录网址 4

Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。

a. 配置 settings.py

    SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)

    SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
    SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
    SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
    SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)
    SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)
    SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)
    SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认

数据库配置(配置)

澳门太陽城集团登录网址 5澳门太陽城集团登录网址 6

a. 配置 settings.py

    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
    SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置


    SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
    SESSION_COOKIE_PATH = "/"                                # Session的cookie保存的路径
    SESSION_COOKIE_DOMAIN = None                              # Session的cookie保存的域名
    SESSION_COOKIE_SECURE = False                             # 是否Https传输cookie
    SESSION_COOKIE_HTTPONLY = True                            # 是否Session的cookie只支持http传输
    SESSION_COOKIE_AGE = 1209600                              # Session的cookie失效日期(2周)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                   # 是否关闭浏览器使得Session过期
    SESSION_SAVE_EVERY_REQUEST = False                        # 是否每次请求都保存Session,默认修改之后才保存

缓存配置

澳门太陽城集团登录网址 7澳门太陽城集团登录网址 8

a. 配置 settings.py

    SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
    SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()         
    SESSION_COOKIE_NAME = "sessionid"                          # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
    SESSION_COOKIE_PATH = "/"                                  # Session的cookie保存的路径
    SESSION_COOKIE_DOMAIN = None                                # Session的cookie保存的域名
    SESSION_COOKIE_SECURE = False                               # 是否Https传输cookie
    SESSION_COOKIE_HTTPONLY = True                              # 是否Session的cookie只支持http传输
    SESSION_COOKIE_AGE = 1209600                                # Session的cookie失效日期(2周)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                     # 是否关闭浏览器使得Session过期
    SESSION_SAVE_EVERY_REQUEST = False                          # 是否每次请求都保存Session,默认修改之后才保存

文本配置

澳门太陽城集团登录网址 9澳门太陽城集团登录网址 10

def login_session(request):
    if request.method=='POST':
        user=request.POST.get('user')
        pwd=request.POST.get('pwd')
        ret=UserInfo.objects.filter(name=user,pwd=pwd)
        if ret:
            request.session['user']=user
            return redirect('/index_session/')
    return render(request,'login.html')

def index_session(request):
    user=request.session.get('user')
    if not user:
        return redirect('/login_session/')
    return render(request,'index.html',locals())

View Code

以及cookie本身保存在客户端。Django的顾客认证

#先settings配置用户表
AUTH_USER_MODEL="blog.UserInfo"

以及cookie本身保存在客户端。 

auth

利用auth模块中的一些方法来进行认证
from django.contrib import auth

以及cookie本身保存在客户端。authenticate()

提供了顾客认证,即验证顾客名以致密码是或不是精确,日常须求username 
password八个根本字参数

若是注解音讯灵通,会回到二个  User  对象。authenticate()会在User
对象上安装叁脾性质量标准志这种认证后端认证了该客户,且该音信在末端的登入进程中是内需的。当大家试图登录二个从数据库中央市直机关接收取来不通过authenticate()的User对象会报错的

user = authenticate(username='someone',password='somepassword')

以及cookie本身保存在客户端。login(HttpRequest, user)

该函数接受三个HttpRequest对象,以致多个证实了的User对象

此函数使用django的session框架给有个别已证实的顾客附加上session id等音信。

login(request, user)

以及cookie本身保存在客户端。logout(request) 

以及cookie本身保存在客户端。 该函数接受三个HttpRequest对象,无重返值。当调用该函数时,当前恳请的session音信集会场全部去掉。该客商正是未有登入,使用该函数也不会报错。

logout(request)

User对象

User 对象属性:

username, password(必填项)password用哈希算法保存到数据库

is_staff : 顾客是或不是持有网址的管理权限.

is_active : 是还是不是允许顾客登陆,
设置为“False“,能够毫无删除客户来制止 客商登陆

is_authenticated()

假定是当真的 User 对象,再次来到值恒为 True 。
用于检查客商是不是已经经过了验证。
通过验证并不意味客户全数别样权力,乃至也不检讨该客户是还是不是处于激活状态,那只是标记顾客成功的经过了验证。
这一个方法很首要,
在后台用request.user.is_authenticated()判定客户是或不是已经报到,借使true则能够向前台展示request.user.name

if not request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

django自带用于此种意况的装饰器:login_requierd()

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):

若客商未有登录,则会跳转到django暗中同意的 登入ULacrosseL ‘/accounts/login/ ‘
(那些值可以在settings文件中通过LOGIN_U福睿斯L进行改换)。并传递 
当前做客url的相对路径 (登录成功后,会重定向到该路径)。

开创顾客

from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='',email='')

修改密码set_password()

user = User.objects.get(username='')
user.set_password(password='')
user.save

check_password(passwd)

客商必要修改密码的时候
首先要让她输入原本的密码 ,要是给定的字符串通过了密码检查,再次来到
True

 基于auth认证达成登录:

def login(request):
    '''
    登录验证
    :param request:
    :return:
    '''
    if request.method=='POST':
        username=request.POST.get('username')
        pwd=request.POST.get('pwd')
        input_valid_code=request.POST.get('valid_code')
        valid_code=request.session.get('valid_code')
        login_response={'user':None,'error_msg':''}
        #进行验证码的比较
        if valid_code.upper()==input_valid_code.upper():
            user=auth.authenticate(username=username,password=pwd)
            if user:
                auth.login(request,user)
                login_response['user']=user.username
            else:
                login_response['error_msg']='用户名或密码错误!'
        else:
            login_response['error_msg']='验证码错误!'
        import json
        return HttpResponse(json.dumps(login_response))
    return render(request,'login.html',locals())

 

 

 

 

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图