19 cookie session

状态保持:

http协议是无状态的,下一次去访问一个页面时并不知道上一次对这个页面做了什么。

记录这些信息的两种方式cookie和session

应用场景:

cookie:记住用户名,安全性要求不高

session:涉及安全性要求比较高的数据,银行卡账号密码等

1、cookie

 由服务器生成,存储在浏览器端的一小段文本信息

.以键值对方式存储

.通过浏览器访问一个网站时,浏览器会将与网站相关的cookie发送给网站的服务器。request.COOKIES

.cookie是基于域名安全的。(只会发送与网站相关的cookie)

.设置cookie,需要一个HttpRespons类的对象,或者它的子类的对象,它的类中有一个set_cookie方法可以设置cookie信息

.浏览器发给服务器的cookie保存在request对象COOKIES中(request.COOKIES),这是一个标准的字典

 

def set_cookie(request):
    respons = HttpResponse('设置aaaa cookie')
    #设置一个cookie信息,名字为num,值为1,k可以设置多个cookie
    respons.set_cookie('num',1)
  respons.set_cookie('num1',2)
return respons def get_cookie(request): num = request.COOKIES['num'] return HttpResponse(num)

 

在浏览器关闭后,cookie就消失了,可以对cookie设置过期时间,set_cookie有两个属性都可以设置过期时间:

max_age是以秒为单位,下面是过期时间为2周:

 

def set_cookie(request):
    respons = HttpResponse('设置aaaa cookie')
    #设置一个cookie信息,名字为num,值为1
    respons.set_cookie('num',1,max_age=14*24*3600)
    return respons

 

另外一个属性是expires,同样设置过期时间为2周:

 

from datetime import datetime,timedelta

def set_cookie(request):
    respons = HttpResponse('设置aaaa cookie')
    #设置一个cookie信息,名字为num,值为1
    # respons.set_cookie('num',1,max_age=14*24*3600)
    respons.set_cookie('num',1,expries=datetime.now()+timedelta(days=14))
    return respons

 

 2、session

存储在服务器端

以键值对存储

依赖于cookie

过期时间,默认两周

读取session:request.session['username'] 或者: request.session.get('键',默认值)

设置session: resquest.session['username'] = 'admin'

清除所有session,删除存储中值的部分: request.session.clear()

清除session,删除整条数据:request.session.flush()

删除session中某个键值: del request.session['键']

设置过期时间:request.session.set_expiry(value)  如果value是0,关闭浏览器失效,如果是整数则为秒,为空默认2周

判断session中是否有某个键:request.session.has_key('键')

 

例子:session记录如果登陆过,直接跳转到首页:

views.py

 

def login(request):
    if request.session.has_key('islogin'):
        return redirect('/index')
    else:
        if 'user' in request.COOKIES:
            username = request.COOKIES['user']
        else:
            username=''
        return render(request,'login.html',{'username':username})


def login_ajax_check(request):
    '''ajax登陆校验'''
    #获取用户名和密码
    username = request.POST.get('username')
    password = request.POST.get('password')

    print(remember)
    #进行校验,返回json数据

    if username == 'test' and password == '123':

        request.session['username'] = username
        request.session['password'] = password

        request.session['islogin'] = True

        return JsonResponse({'res': 1})

    else:
        return JsonResponse({'res':0})

 

 

 

login.html

 

<!DOCTYPE html>
<html>
<head>
    <title>login</title>
    <script type="text/javascript" src="/static/js/jquery.js"></script>
    <script type="text/javascript">
        $(function(){
            $('#btn_login').click(function(){
                //获取用户名和密码
                username = $('#username').val()
                password = $('#password').val()

                //发起post方式的ajax请求/login_ajax_check,携带用户名和密码
                $.ajax({
                    url:'/login_ajax_check',
                    type:'post',
                    data:{'username':username,'password':password,},
                    dataType:'json',
                }).done(function(data){
                    //登陆成功返回{'res':1}
                    //登陆失败返回{'res':0}
                    if(data.res==0){
                        $('#error').show().html('用户名或密码错误!')
                    }
                    else{
                        //跳转到首页
                        location.href = '/index'
                    }
                })
            })
        })
    </script>
    <style type="text/css">
        #error{
            display: none;
            color: red;
        }
    </style>
</head>
<body>
    <!-- method有两个选项:post和get,post:信息会在请求头部中,get:信息会直接在url中。post更安全一些 -->
  <!--   <form method="post" action="/check">
        user:<input type="text" name="username">
        pass:<input type="password" name="password">
        <input type="submit" name="提交">
    </form>
    不用表单提交,下面改用ajax
    -->
    user:<input type="text" id="username" value="{{username}}">
    pass:<input type="password" id="password"><br>
 <!--    <input type="checkbox" id="remember">记住 <br> -->
    <input type="button" id='btn_login' value="提交">
    <div id='error'></div>

</body>
</html>

 

posted @ 2019-08-13 00:17  greenfan  阅读(114)  评论(0)    收藏  举报