1. 程式人生 > 程式設計 >Django中的cookie和session

Django中的cookie和session

http協議是無狀態的。下一次去訪問一個頁面時並不知道上一次對這個頁面做了什麼。

無狀態的應用層面的原因是:瀏覽器和伺服器之間的通訊都遵守HTTP協議。

根本原因是:瀏覽器與伺服器是使用Socket套接字進行通訊的,伺服器將請求結果返回給瀏覽器之後,會關閉當前的Socket連線,而且伺服器也會在處理頁面完畢之後銷燬頁面物件。

有時需要儲存下來使用者瀏覽的狀態,比如使用者是否登入過,瀏覽過哪些商品等。 實現狀態保持主要有兩種方式:

在客戶端儲存資訊使用Cookie。在伺服器端儲存資訊使用Session。cookiecookie及其使用

cookie是由伺服器生成,儲存在瀏覽器端的一小段文字資訊。

cookie的特點:

  • 1)以鍵值對方式進行儲存。
  • 2)通過瀏覽器訪問一個網站時,會將瀏覽器儲存的跟網站相關的所有cookie資訊傳送給該網站的伺服器。request.COOKIES
  • 3)cookie是基於域名安全的。www.baidu.com www.tudou.com
  • 4)cookie是有過期時間的,如果不指定,預設關閉瀏覽器之後cookie就會過期。

cookie使用示例

設定cookie

def set_cookie(request):
  """設定cookie資訊"""
  response = HttpResponse("設定cookie")
  # 設定一個cookie資訊,名字為num,值為1
  response.set_cookie('num',1)  
  # 返回response
  return response

獲取cookie

def get_cookie(request):
  """獲取cookie資訊"""
  # 取出cookie num的值
  num = request.COOKIES['num']
  return HttpResponse(num)

設定cookie過期時間

def set_cookie(request):
  """攝製cookie資訊"""
  response = HttpResponse("設定cookie")
  # 設定一個cookie資訊,名字為num,值為1,並且設定 cookie的過期時間為2周,兩種方式
  response.set_cookie('num',1,max_age=14*24*3600)
  # response.set_cookie('num',expires=datetime.now()+timedelta(days=14))
  return response

設定多個cookie

def set_cookie(request):
  """攝製cookie資訊"""
  response = HttpResponse("設定cookie")
   # 設定多個cookie
  response.set_cookie('num',1)
  response.set_cookie('num2',2)
  return response

cookie記住使用者名稱示例

編寫login.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Login</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body>
<form action="/login_check/" method="post">
  <label for="username">使用者:
    <input type="text" id="username" name="username" value="{{ usernam }}">
  </label>
  <br />
  <label for="password">密碼:
    <input type="password" id="password" name="password">
  </label>
  <br />
  <input type="checkbox" name="remember">記住使用者名稱
  <br />
  <input type="submit" value="登入">
</form>

</body>
</html>

編寫login_check函式

def login_check(request):
  # 1.獲取使用者名稱和密碼
  username = request.POST.get("username")
  password = request.POST.get("password")
  remember = request.POST.get("remember")
  print(username,password)
  # 2.進行校驗
  # 3.返回應答
  if username == "yifchan" and password == "yifchan":
    response = redirect("/index")
    # 判斷是否需要記住使用者名稱
    if remember == 'on':
      # 設定cookie username-過期時間為1周
      response.set_cookie('username',username,max_age=7*24*3600)
    return response
  else:
    return HttpResponse("賬號或密碼錯誤")

編寫login函式

def login(request):
  """登入處理函式"""
  # 獲取cookie username
  if 'username' in request.COOKIES:
    username = request.COOKIES['username']
  else:
    username = ''
  return render(request,"booktest/login.html",{'usernam': username})

設計路由

url(r'^login/$',views.login),url(r'^login_check/$',views.login_check),

Session

session儲存在伺服器端。

session的特點:

  • 1) session是以鍵值對進行儲存的。
  • 2) session依賴於cookie。唯一的標識碼儲存在sessionid cookie中。
  • 3) session也是有過期時間,如果不指定,預設兩週就會過期。

session物件和方法

物件及方法

通過HttpRequest物件的session屬性進行會話的讀寫操作。

1) 以鍵值對的格式寫session。

request.session['鍵']=值

2)根據鍵讀取值。

request.session.get('鍵',預設值)

3)清除所有session,在儲存中刪除值部分。

request.session.clear()

4)清除session資料,在儲存中刪除session的整條資料。

request.session.flush()

5)刪除session中的指定鍵及值,在儲存中只刪除某個鍵及對應的值。

del request.session['鍵']

6)設定會話的超時時間,如果沒有指定過期時間則兩個星期後過期。

request.session.set_expiry(value)

  • 如果value是一個整數,會話將在value秒沒有活動後過期。
  • 如果value為0,那麼使用者會話的Cookie將在使用者的瀏覽器關閉時過期。
  • 如果value為None,那麼會話永不過期。

session使用示例

# 設定session
def set_session(request):
  """設定session"""
  request.session['username'] = 'yifchan'
  request.session['age'] = 18
  request.session.set_expiry(10) # 設定session的有效時間為10s
  return HttpResponse('設定session成功')


# 獲取session
def get_session(request):
  """獲取session"""
  username = request.session['username']
  age = request.session['age']
  info = username + ":" + age
  return HttpResponse(info)


# 清除session
def clear_session(request):
  """清除session資訊"""
  # request.session.clear() # 只會清除有用資訊部分,但這整條資訊不回被清除
  request.session.flush() # 清除整條session資訊
  return HttpResponse("清除session成功")

注意:所謂的session過期指的是瀏覽器端儲存的cookie的sessionid過期了。

cookie和session的應用場景

cookie:記住使用者名稱。安全性要求不高。
session:涉及到安全性要求比較高的資料。例如銀行卡賬戶,密碼等。

總結

以上所述是小編給大家介紹的Django中的cookie和session,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!