1. 程式人生 > >會話技術cookie、jession

會話技術cookie、jession

cookie

1、存資料

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登入</title>
</head>
<body>
<form action="{% url 'day01:doloading' %}" method="get">
    賬號:<input type="text" name="username"><br />
    密碼:<input type="text" name="passwd"><br />
    <input type="submit" value="登入">
</form>
</body>
</html>
from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.

def loading(request):

    return render(request, 'loading.html')

def doloading(request):
    username = request.GET.get('username')     # 獲取輸入的使用者名稱
    passwd = request.GET.get('passwd')         # 獲取輸入的密碼
    response = HttpResponse('登入成功')
    response.set_cookie('username', username)   # 存使用者名稱
    response.set_cookie('passwd', passwd)       # 存使用者密碼

    return response

格式: response.set_cookie(key,value)

通過response通知瀏覽器要儲存key,value形式的cookie 

設定過期時間

預設情況下,關閉瀏覽器cookie就會過期,有時候我們需要設定過期時間:  格式:  response.set_cookie(key,value,expires=值)           expires=0           立馬過期           expires=None    不過期           expires= 值        單位是秒                                                                                                                                                                  expires=timedelta(days=值)    表示多少天后過期   hours=值 表示多少小時後過期..... 

2、取資料

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登入</title>
</head>
<body>
<form action="{% url 'day01:doloading' %}" method="get">
    賬號:<input type="text" name="username" value="{{ username }}"><br />
    密碼:<input type="text" name="passwd" value="{{ passwd }}"><br />
    <input type="submit" value="登入">
</form>
</body>
</html>
from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.

def loading(request):
    username = request.COOKIES.get('username')       # 獲取cookie中儲存的使用者名稱
    passwd = request.COOKIES.get('passwd')           # 獲取cookie中儲存的密碼
    if not username:
        username = ""
    if not passwd:
        passwd = ""
    data = {
        'username':username,
        'passwd':passwd,
    }
    return render(request, 'loading.html', context=data)

def doloading(request):
    username = request.GET.get('username')
    passwd = request.GET.get('passwd')
    response = HttpResponse('登入成功')
    response.set_cookie('username', username)
    response.set_cookie('passwd', passwd)

    return response

格式: request.COOKIES.get(key)

注:cookie儲存資料的方式類似字典

3、刪除

def delcookie(request):
    response = HttpResponse("清除成功")
    response.delete_cookie('username')   # 刪除儲存的使用者名稱
    response.delete_cookie('passwd')     # 刪除儲存的密碼
    return response

格式:response.delete_cookie(key)

4、cookie中文輸入問題

可匯入json模組,

使用json.dumps(儲存的資料)存入,使用json.loads(獲取的資料)獲取資料。

如:    username = json.dumps(request.GET.get('username'))              存入時使用

           username = json.loads(request.COOKIES.get('username'))     取出時使用

session

1、存資料

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登入</title>
</head>
<body>
<form action="{% url 'day01:doloading' %}" method="get">
    賬號:<input type="text" name="username" value="{{ username }}"><br />
    密碼:<input type="text" name="passwd" value="{{ passwd }}"><br />
    <input type="submit" value="登入">
</form>
</body>
</html>
import json

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.

def loading(request):

    return render(request, 'loading.html')

def doloading(request):
    username = json.dumps(request.GET.get('username'))
    passwd = request.GET.get('passwd')
    # 使用session存資料
    request.session['username'] = username  # 存入使用者名稱
    request.session['passwd'] = passwd      # 存入密碼
    return HttpResponse('登入成功')

格式:  request.session[key] = value

注意:在django中儲存了一個session後,django會 自動 的生成session key,並將session key與 資料自動的儲存到 django_session

表中去,資料會自動的用base64編碼,並會自動的讓瀏覽器的cookie儲存sessionid(就是sessison key)

2、獲取資料

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登入</title>
</head>
<body>
<form action="{% url 'day01:doloading' %}" method="get">
    賬號:<input type="text" name="username" value="{{ username }}"><br />
    密碼:<input type="text" name="passwd" value="{{ passwd }}"><br />
    <input type="submit" value="登入">
</form>
</body>
</html>
import json

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.

def loading(request):
    # 獲取session中儲存的資料
    username = request.session.get('username')
    passwd = request.session.get('passwd')
    if not username:
        username = ''
    if not passwd:
        passwd = ''
    data = {
        'username': username,
        'passwd': passwd,
    }
    return render(request, 'loading.html', context=data)

def doloading(request):
    username = json.dumps(request.GET.get('username'))
    passwd = request.GET.get('passwd')
    # 使用session存資料
    request.session['username'] = username  # 存入使用者名稱
    request.session['passwd'] = passwd      # 存入密碼
    return HttpResponse('登入成功')

格式: value =  request.session.get(key)

注意: 在django中,會 自動 的將cookie中的sessionid拿出來跟資料庫中的session key匹配,匹配成功後既可以獲取值    

3、清除資料

def delsession(request):
    request.session.flush()         # 清除資料
    return HttpResponse('清除成功')

request.session.flush()   會清除對應的cookie及session