一、Session的概念 cookie是在瀏覽器端保存鍵值對數據,而session是在伺服器端保存鍵值對數據 session 的使用依賴 cookie:在使用Session後,會在Cookie中存儲一個sessionid的數據,每次請求時瀏覽器都會將這個數據發給伺服器,伺服器在接收到sessioni ...
一、Session的概念
- cookie是在瀏覽器端保存鍵值對數據,而session是在伺服器端保存鍵值對數據
- session 的使用依賴 cookie:在使用Session後,會在Cookie中存儲一個sessionid的數據,每次請求時瀏覽器都會將這個數據發給伺服器,伺服器在接收到sessionid後,會根據這個值找出這個請求者的Session。
二、Django中session的使用
- session鍵值對數據保存
session
數據預設保存在django項目的一張資料庫表中(表名為:django_session
),保存格式如下:
三、數據操作:
- 以鍵值對的格式寫session
request.session['鍵']=值
- 根據鍵讀取值
request.session.get('鍵',預設值) # 或者 request.session['鍵']
- 清除所有session,在存儲中刪除值的部分
request.session.clear()
- 清除session數據,在存儲中刪除session的整條數據
request.session.flush()
- 刪除session中的指定鍵及值,在存儲中只刪除某個鍵及對應的值
del request.session['鍵']
- 設置session數據有效時間; 如果不設置,預設過期時間為兩周
request.session.set_expiry(value)
- 如果value是一個整數,則 session數據 將在value秒沒有活動後過期。
- 如果value為None,那麼會話永不過期。
- 如果value為0,那麼用戶會話的Cookie將在用戶的瀏覽器關閉時過期。
四、以下是使用例子:
# 發簡訊介面
def sms_send(request):
# http://localhost:8000/duanxin/duanxin/sms_send/?phone=18434288349
# 1 獲取手機號
phone = request.GET.get('phone')
# 2 生成6位驗證碼
code = aliyunsms.get_code(6, False)
# 3 緩存到Redis
#cache.set(phone,code,60) #60s有效期
#print('判斷緩存中是否有:',cache.has_key(phone))
#print('獲取Redis驗證碼:',cache.get(phone))
#暫時用session處理
request.session['phone'] = code
request.session.set_expiry(300) #設置5分鐘後過期
print('判斷緩存中是否有:', request.session.get('phone'))
print('獲取session驗證碼:',request.session.get('phone'))
# 4 發簡訊
result = aliyunsms.send_sms(phone, code)
return HttpResponse(result)
# 簡訊驗證碼校驗
def sms_check(request):
# /duanxin/sms_check/?phone=xxx&code=xxx
# 1. 電話和手動輸入的驗證碼
phone = request.GET.get('phone')
code = request.GET.get('code')
# 2. 獲取redis中保存的code
#print('緩存中是否包含:',cache.has_key(phone))
#print('取值:',cache.get(phone))
#cache_code = cache.get(phone)
#獲取session里的code
print('取值:', request.session.get('phone'))
cache_code = request.session.get('phone')
# 3. 判斷
if code == cache_code:
return HttpResponse(json.dumps({'result':'OK'}))
else:
return HttpResponse(json.dumps({'result':'False'}))