状态保持

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

在web中记录信息的两种方式:cookiesession

·

Cookie

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

特点:

1)以键值对方式进行存储。

2)通过浏览器访问一个网站时,会将浏览器存储的跟网站相关的所有cookie信息发送给该网站的服务器。 request.COOKIES

3)cookie 是基于域名安全的。

4) cookie 是有过期时间的,如果不指定,默认关闭浏览器后 cookie 就会过期。

python session中cookies的设置 python session保持cookie_html

代码实例:

views.py

from django.http import HttpResponse


def set_cookie(request):
	'''设置cookie信息'''

	# 创建一个HttpResponse对象
	response = HttpResponse('设置cookie')
	# 设置一条cookie信息,设定过期时间为14天后
	response.set_cookie('num', 1, max_age=14*24*3600)
	return response

python session中cookies的设置 python session保持cookie_python_02

`

views.py

from django.http import HttpResponse

def get_cookie(resquest):
	'''获得cookie值'''
	
	# request属性COOKIES字典中保存了所有的cookie键值对,通过COOKIES取出对应的值
	num = request.COOKIES['num']
	return HttpResponse(num)

python session中cookies的设置 python session保持cookie_session_03

·

·

登录案例–通过cookie记住用户名和密码

views.py

def login_ajax(request):
    if 'username' in request.COOKIES:
        username = request.COOKIES['username']
    else:
        username = ''
    if 'password' in request:
        password = request.COOKIES['password']
    else:
        password = ''

    return render(request, 'booktest/login_ajax.html', {'username': username, 'password': password})


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

    # 获取是否记住用户名和密码的选项勾选状态,为None表示没有勾选,为on表示勾选
    remember = request.POST.get('remember')

    # 进行效验,返回json数据
    try:
        # 从数据库中获取姓名为username的对象
        u1 = UserInfo.objects.get(username=username)
    except:
        return JsonResponse({'res': 0})

    else:
        if u1.password == int(password):
            response = JsonResponse({'res': 1})
            # 当数据库中存在该用户名和密码时设置cookie值,设置过期时间为一周
            response.set_cookie('username', username, max_age=7*24*3600)
            response.set_cookie('password', password, max_age=7*24*3600)
            return response
        else:
            return JsonResponse({'res': 2})

·

login_ajax.html

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title>ajax登陆页面</title>
    <script src="/static/js/jquery-1.12.4.min.js"></script>
    <script>
        $(function(){
            $('#btnLogin').click(function () {
                // 获取用户名和密码
                nameuser = $('#nameuser').val()
                passqord = $('#password').val()

                // 发起post ajax 请求
                $.ajax({
                    'url':'login_ajax_check',
                    'type':'post',
                    'data':{'username':nameuser, 'password':passqord},
                    'datatype':'json'
                }).success(function (data) {
                    // 登录成功{'res':1}
                    // 登录失败{'res':0}

                    if (data.res === 0){
                        $('#errmsg').show().html('用户名输入错误')

                    }
                    else if(data.res === 2){

                        $('#errmsg').show().html('密码输入错误')
                    }
                    else {
                        // 跳转到图书界面
                        location.href = '/books'
                    }
                })
            })
        })
    </script>
    <style>
        #errmsg{
            display: none;
            color: red;
        }
    </style>
</head>
<body>
<div>
    用户名:<input type="text" id="nameuser" value="{{ username }}"><br/>
    密码:<input type="password" id="password" value="{{ password }}"><br/>
    <input type="checkbox" name="remember">记住用户名<br/>
    <input type="button" id="btnLogin" value="登录">
    <div id="errmsg"></div>
</div>
</body>
</html>

实验结果:

python session中cookies的设置 python session保持cookie_html_04


·

·

python session中cookies的设置 python session保持cookie_session_05

·

·

·

session

session存储在服务器端

特点:

1)session 是以键值对进行存储的

2)session 依赖于 cookie。唯一的 标识码保存在 sessionid cookie

3)session 也有过期时间,如果不指定,默认两周就会过期

设置session:request.session[‘username’] = ‘xxx’
获取session:request.session[‘username’]

python session中cookies的设置 python session保持cookie_django_06


·

通过HttpRequest对象的session属性进行读写操作

1)以键值对的格式写入session

request.session[‘键’] = 值

2)根据键读取值

request.session.get(‘键’, 默认值)

3)清除所有session,在存储中(数据库中django自建的session表)删除值部分,键(唯一标识码)保留

request.session.clear()

4)清楚session数据,在存储中删除session的整条数据

request.session.flush()

5)删除session中的指定键的值,在存储中只删除某个键对应的值,键保留

del request.session[‘键’]

6)设置会话的超过时间,如果没有指定过期时间则两个星期后过期

request.session.set_expiry(value)

● 如果value是一个整数,会话的session_id cookie将在value秒没有活动后过期。
● 如果value为0,那么用户会话的session_id cookie将在用户的浏览器关闭时过期。
● 如果value为None,那么会话的session_id cookie两周之后过期。

·

代码实例

views.py

from django.http import HttpResponse

def set_session(request):
	request.session['name'] = 'name'
	request.session['age'] = 18
	return HttpResponse('设置session')

python session中cookies的设置 python session保持cookie_django_07

`

from django.http import HttpResponse

def get_session(request):
	name = request.session['name']
	age = request.session['age']
	return HttpResponse(name+':'+str(age))

python session中cookies的设置 python session保持cookie_session_08

`

`

登录案例–记住用户登录状态,下次访问直接登录跳转不必输入用户和密码

代码实例:

views.py

def login_ajax(request):
    # 当服务器session表中含有键isLogin时,直接转到图书界面
    if request.session.has_key('isLogin'):
        return render(request, 'booktest/books_display.html')
    else:
        if 'username' in request.COOKIES:
            username = request.COOKIES['username']
        else:
            username = ''
        if 'password' in request:
            password = request.COOKIES['password']
        else:
            password = ''

        return render(request, 'booktest/login_ajax.html', {'username': username, 'password': password})


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

    # 获取是否记住用户名和密码的选项勾选状态,为None表示没有勾选,为on表示勾选
    remember = request.POST.get('remember')

    # 进行效验,返回json数据
    try:
        # 从数据库中获取姓名为username的对象
        u1 = UserInfo.objects.get(username=username)
    except:
        return JsonResponse({'res': 0})

    else:
        if u1.password == int(password):
            response = JsonResponse({'res': 1})
            # 当数据库中存在该用户名和密码时设置cookie值,设置过期时间为一周
            response.set_cookie('username', username, max_age=7 * 24 * 3600)
            response.set_cookie('password', password, max_age=7 * 24 * 3600)

            # 利用session,设置用户已登录
            request.session['isLogin'] = True
            return response
        else:
            return JsonResponse({'res': 2})

login_ajax.html

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title>ajax登陆页面</title>
    <script src="/static/js/jquery-1.12.4.min.js"></script>
    <script>
        $(function(){
            $('#btnLogin').click(function () {
                // 获取用户名和密码
                nameuser = $('#nameuser').val()
                passqord = $('#password').val()

                // 发起post ajax 请求
                $.ajax({
                    'url':'login_ajax_check',
                    'type':'post',
                    'data':{'username':nameuser, 'password':passqord},
                    'datatype':'json'
                }).success(function (data) {
                    // 登录成功{'res':1}
                    // 登录失败{'res':0}

                    if (data.res === 0){
                        $('#errmsg').show().html('用户名输入错误')

                    }
                    else if(data.res === 2){

                        $('#errmsg').show().html('密码输入错误')
                    }
                    else {
                        // 跳转到图书界面
                        location.href = '/books'
                    }
                })
            })
        })
    </script>
    <style>
        #errmsg{
            display: none;
            color: red;
        }
    </style>
</head>
<body>
<div>
    用户名:<input type="text" id="nameuser" value="{{ username }}"><br/>
    密码:<input type="password" id="password" value="{{ password }}"><br/>
    <input type="checkbox" name="remember">记住用户名<br/>
    <input type="button" id="btnLogin" value="登录">
    <div id="errmsg"></div>
</div>
</body>
</html>

python session中cookies的设置 python session保持cookie_django_09

·

·

cookie和session的区别和应用场景

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

session涉及到安全性要求比较高的数据。银行卡账户,密码,登陆状态等。

·

cookie保存在客户端
session保存在服务器端

·

cookie的值会直接显示出来
session的值会经过base64编码后保存

·

cookie在Django框架中通过HttpResponse的对象进行设置,获取
session在Django框架中通过request对象进行设置,获取