1. 程式人生 > 其它 >js 字串 - 擷取字串

js 字串 - 擷取字串

1.什麼是Cookie

  當客戶端訪問時,服務端會為客戶端生成一個Cookie鍵值對資料,通過Response響應給到客戶端。當下一次客戶端繼續訪問相同的服務端時,瀏覽器客戶端就會將這個Cookie值連帶傳送到服務端

Cookie值儲存在瀏覽器下,一般在你的瀏覽器安裝目錄的Cookie目錄下,我們也可以通過F12或者各種瀏覽器的開發者工具來獲取到

因為cookie是儲存在瀏覽器中的一個純明文字串,所以一般來說服務端在生成cookie值時不建議儲存敏感資訊比如密碼

2.框架對於COOKIE的操作

  django的程式碼中,我們可以使用一些提供Response響應的類,如:HttpResponse

redirect等例項的內建set_cookie函式來進行django專案中的Cookie設定

  1.實現一下COOKIE的設定:

  resp.set_cookie('status','huangjin')
  
 以上檢視函式返回一個HttpResponse物件,並在該物件中整合COOKIE值的設定,設定key值為testvalue值為hello cookie


 2.再來簡單的實現一下COOKIE的獲取:
   
# 獲取cookie,cookie是儲存在客戶端的,獲取要是有request請求

    print(request.COOKIES.get("name"))

Cookie值儲存在,request
中的COOKIES屬性中 並且該屬性獲取到的結果與python中的字典類似,直接通過內建函式get獲取即可
 3.刪除COOKIE
  resp.delete_cookie('name')

Cookie中刪除指定的key及對應的value,如果key值不存在,也不會引發任何異常。 由於Cookie的工作方式,pathdomain應該與set_cookie時使用的值相同,否則Cookie值將不會被刪除


通過response相應類的delete_cookie方法,本來應該在會話結束之後才消失的Cookie值,現在已經被直接刪除掉。後臺中通過Request中的Cookie字典獲取到值也為None


不要忘記字典的get,獲取不到結果時,返回None


但是,現在還有一個問題,我們在使用者瀏覽器儲存的Cookei值為明文,具有極大的安全隱患,django也提供了支援簽證的Cookie值儲存及獲取方式

3.防止篡改COOKIE

通過set_signed_cookie函式進行持有簽名的COOKIE值設定,避免使用者在客戶端進行修改

要記得,這個函式並不是對COOKIE值進行加密

HttpResonse.set_signed_cookie(key, value, salt='', max_age=None,
expires=None, path='/', domain=None, secure=None, httponly=True)
# 為cookie值添加簽名,其餘引數與set_cookie相同

Request.get_signed_cookie(key, salt='', max_age=None)
# 從使用者請求中獲取通過salt鹽值加了簽名的`Cookie`值

這裡的salt要與之前儲存時使用的salt值相同才可以解析出正確結果。 還要注意的是,如果對應的key值不存在,則會引發KeyError異常,所以要記得異常捕獲來確定是否含有Cookie

def check_salt_cookie(request):
   try:
       salt_cookie = request.get_signed_cookie(key='salt_cookie',salt='nice')
   except KeyError: #獲取不到該key值的Cookie
       response = HttpResponse('正在設定一個salt Cookie值')
       response.set_signed_cookie(key='salt_cookie',salt='nice',value='salt_cookie')
       return response
   else: #獲取到了對應key值,展示到新的HttpResonse中
       return HttpResponse('獲取到的salt Cookie值:%s' % salt_cookie)

第一次訪問的時候,還沒有加Cookie值,所以我們在獲取的時候會丟擲KeyError異常 此時捕獲異常,並且設定Cookie即可;

再次重新整理的時候,因為這裡已經給出了Cookie值,則不會引發異常,會在頁面中展示獲取到的加鹽Cookie



4.Session的原理

雖然說有了Cookie之後,我們把一些資訊儲存在客戶端瀏覽器中,可以保持使用者在訪問站點時的狀態,但是也存在一定的安全隱患,Cookie值被曝露,Cookie值被他人篡改,等等。我們將換一種更健全的方式,也就是接下來要說的Session

Session在網路中,又稱會話控制,簡稱會話。用以儲存使用者訪問站點時所需的資訊及配置屬性。當用戶在我們的Web服務中跳轉時,儲存在Session中的資料不會丟失,可以一直在整個會話過程中存活。


5.框架如何操作Session

settings.pySessionMiddleware啟用後 在檢視函式的引數request接收到的客戶端發來的HttpResquest請求物件中都會含有一個session屬性

這個屬性和之前所討論的Cookie類似,是一個類字典物件,首先支援如下常用字典內建屬性

6.獲取Session
session_data = request.session.get(Key)
session_data = request.session[Key]

Session中獲取對應值,get方法獲取時,如不存在該Key值,不會引發異常,返回None 而第二種直接通過get方法獲取,如Key值不存在,引發KeyErro

7.刪除Session
del request.seesion[Key]
# 刪除對應session,Key值不存在時,引發KeyError

request.session.clear()
# 清空Session中的所有資料。這裡客戶端還會保留sessionid;
# 只不過在服務端sessionid對應的資料沒有了
 
8.Session刪除總結

使用的是del的針對性刪除方式,這樣不會將整個客戶端的session刪除掉

使用request.session.clear(),只是清空了服務端Session中的資料,但是客戶端的Cookie中還會儲存sessionid,只不過這個值對應的字串所對應的使用者資料是一個空

使用request.session.flush(),那麼客戶端Cookie中儲存的sessionid首先會被刪除,其次服務端通過sessionid值儲存的使用者資料也會被全部刪除。