<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg) ## cookie和session 1.cookie:在網站中,http請求是無狀態的。也就是說即使第一次和服務器連接后并且登錄成功后,第二次請求服務器依然不能知道當前請求是哪個用戶。cookie的出現就是為了解決這個問題,第一次登錄后服務器返回一些數據(cookie)給瀏覽器,然后瀏覽器保存在本地,當該用戶發送第二次請求的時候,就會自動的把上次請求存儲的cookie數據自動的攜帶給服務器,服務器通過瀏覽器攜帶的數據就能判斷當前用戶是哪個了。cookie存儲的數據量有限,不同的瀏覽器有不同的存儲大小,但一般不超過4KB。因此使用cookie只能存儲一些小量的數據 2.session: session和cookie的作用有點類似,都是為了存儲用戶相關的信息。不同的是,cookie是存儲在本地瀏覽器,session是一個思路、一個概念、一個服務器存儲授權信息的解決方案,不同的服務器,不同的框架,不同的語言有不同的實現。雖然實現不一樣,但是他們的目的都是服務器為了方便存儲數據的。session的出現,是為了解決cookie存儲數據不安全的問題的。 3.cookie和session使用:web開發發展至今,cookie和session的使用已經出現了一些非常成熟的方案。在如今的市場或者企業里,一般有兩種存儲方式 >3.1 存儲在服務端:通過cookie存儲一個sessionid,然后具體的數據則是保存在session中。如果用戶已經登錄,則服務器會在cookie中保存一個sessionid,下次再次請求的時候,會把該sessionid攜帶上來,服務器根據sessionid在session庫中獲取用戶的session數據。就能知道該用戶到底是誰,以及之前保存的一些狀態信息。這種專業術語叫做server side session。Django把session信息默認存儲到數據庫中,當然也可以存儲到其他地方,比如緩存中,文件系統中等。存儲在服務器的數據會更加的安全,不容易被竊取。但存儲在服務器也有一定的弊端,就是會占用服務器的資源,但現在服務器已經發展至今,一些session信息還是綽綽有余的。 >3.2 將session數據加密,然后存儲在cookie中。這種專業術語叫做client side session。flask框架默認采用的就是這種方式,但是也可以替換成其他形式。 ## 在django中操作cookie和session ### 操作cookie #### 設置cookie 設置cookie是設置值給瀏覽器的。因此我們需要通過response的對象來設置,設置cookie可以通過response.set_cookie來設置,這個方法的相關參數如下: ``` key:這個cookie的key。 value:這個cookie的value。 max_age:最長的生命周期。單位是秒。 expires:過期時間。跟max_age是類似的,只不過這個參數需要傳遞一個具體的日期,比如datetime或者是符合日期格式的字符串。如果同時設置了expires和max_age,那么將會使用expires的值作為過期時間。 path:對域名下哪個路徑有效。默認是對域名下所有路徑都有效。 domain:針對哪個域名有效。默認是針對主域名下都有效,如果只要針對某個子域名才有效,那么可以設置這個屬性. secure:是否是安全的,如果設置為True,那么只能在https協議下才可用。 httponly:默認是False。如果為True,那么在客戶端不能通過JavaScript進行操作 ``` ``` from datetime import datetime from django.utils.timezone import make_aware def cookie_test(request): response = HttpResponse("index") expires = make_aware(datetime(year=2018,month=12,day=27,hour=3,minute=20,second=0)) response.set_cookie("username","juran",expires=expires,path="/cms/") return response def get_cookie_test(request): cookies = request.COOKIES username = cookies.get('username') return HttpResponse(username) ``` #### 刪除cookie 通過delete_cookie即可刪除cookie。實際上刪除cookie就是將指定的cookie的值設置為空的字符串,然后使用將他的過期時間設置為0,也就是瀏覽器關閉后就過期。 ``` def delete_cookie(request): response = HttpResponse('delete') response.delete_cookie('username') return response ``` #### 獲取cookie 獲取瀏覽器發送過來的cookie信息。可以通過request.COOKIES來或者。這個對象是一個字典類型。比如獲取所有的cookie ``` cookies = request.COOKIES for cookie_key,cookie_value in cookies.items(): print(cookie_key,cookie_value) ``` ### 操作session django中的session默認情況下是存儲在服務器的數據庫中的,在表中會根據sessionid來提取指定的session數據,然后再把這個sessionid放到cookie中發送給瀏覽器存儲,瀏覽器下次在向服務器發送請求的時候會自動的把所有cookie信息都發送給服務器,服務器再從cookie中獲取sessionid,然后再從數據庫中獲取session數據。但是我們在操作session的時候,這些細節壓根就不用管。我們只需要通過request.session即可操作。 ``` def index(request): request.session['username'] = 'jr' request.session.get('username') return HttpResponse('index') ``` session常用的方法如下: <ol> <li><p><code>get</code>:用來從<code>session</code>中獲取指定值。</p> </li> <li><p><code>pop</code>:從<code>session</code>中刪除一個值。</p> </li> <li><p><code>keys</code>:從<code>session</code>中獲取所有的鍵。</p> </li> <li><p><code>items</code>:從<code>session</code>中獲取所有的值。</p> </li> <li><p><code>clear</code>:清除當前這個用戶的<code>session</code>數據。</p> </li> <li><p><code>flush</code>:刪除<code>session</code>并且刪除在瀏覽器中存儲的<code>session_id</code>,一般在注銷的時候用得比較多。</p> </li> <li><p><code>set_expiry(value)</code>:設置過期時間。</p> <ul> <p>整形:代表秒數,表示多少秒后過期。</p> <p><code>0</code>:代表只要瀏覽器關閉,<code>session</code>就會過期。</p> <p><code>None</code>:會使用全局的<code>session</code>配置。在<code>settings.py</code>中可以設置<code>SESSION_COOKIE_AGE</code>來配置全局的過期時間。默認是<code>1209600</code>秒,也就是2周的時間。</p> <p>-1:代表已經過期</p> </ul> </li> <li><p><code>clear_expired</code>:清除過期的<code>session</code>。<code>Django</code>并不會清除過期的<code>session</code>,需要定期手動的清理,或者是在終端,使用命令行<code>python manage.py clearsessions</code>來清除過期的<code>session</code>。</p> </li> </ol> ### 修改session的存儲機制 默認情況下,session數據是存儲到數據庫中的。當然也可以將session數據存儲到其他地方。可以通過設置SESSION_ENGINE來更改session的存儲位置,這個可以配置為以下幾種方案 1. django.contrib.sessions.backends.db:使用數據庫。默認就是這種方案。 2. django.contrib.sessions.backends.file:使用文件來存儲session。 3. django.contrib.sessions.backends.cache:使用緩存來存儲session。想要將數據存儲到緩存中,前提是你必須要在settings.py中配置好CACHES,并且是需要使用Memcached,而不能使用純內存作為緩存。 4. django.contrib.sessions.backends.cached_db:在存儲數據的時候,會將數據先存到緩存中,再存到數據庫中。這樣就可以保證萬一緩存系統出現問題,session數據也不會丟失。在獲取數據的時候,會先從緩存中獲取,如果緩存中沒有,那么就會從數據庫中獲取。 5. django.contrib.sessions.backends.signed_cookies:將session信息加密后存儲到瀏覽器的cookie中。這種方式要注意安全,建議設置SESSION_COOKIE_HTTPONLY=True,那么在瀏覽器中不能通過js來操作session數據,并且還需要對settings.py中的SECRET_KEY進行保密,因為一旦別人知道這個SECRET_KEY,那么就可以進行解密。另外還有就是在cookie中,存儲的數據不能超過4k **配置文件** ``` CACHES = { 'default':{ 'BACKEND':'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION':'127.0.0.1:11211' } } SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' ``` **在memcached中查看** ``` stats items stats cachedump 4 0 ``` session和cookie:https://www.cnblogs.com/sss4/p/7071334.html
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看