淺析php中session和cookie的區別和聯絡

來源:互聯網
上載者:User


首先談談cookie吧,百度百科是這樣定義的:是網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。

    php中產生一個cookie的方法很簡單:setcookie(name, value, expire, path, domain);

    name:cookie中定義的名字。

    value:cookie中對name所儲存的值。這個值儲存在了使用者的終端;不要儲存敏感資訊(個人重要訊息,金錢)。

    expire:cookie中名值對儲存的到期時間,這個值是以時間戳記的形式儲存下來的。

    path:cookie值儲存的有效路徑,如果設定成 ‘/’ 那麼對整個項目都有效,如果設定成 ‘/foo/’ 那麼cookie的有效路徑在foo以及其下屬檔案,如果沒有做任何設定那麼他的有效路徑是當前檔案夾。

    domian:cookie可用的網域名稱範圍。

<?php
setcookie('site_name', 'IT部落格');//設定一個cookie:site_name他的值是IT部落格,這樣就建立了一個會話,不過這個cookie儲存在了記憶體中隨著瀏覽器的關閉而銷毀。
setcookie('site_name', 'IT部落格', time() + 86400);//設定cookie並將他的到期時間設定為一天后,這樣的會話會將cookie的值儲存到硬碟中,關閉瀏覽器,一天內cookie在瀏覽器開啟的時候還是有效。
?>     寫到這裡想起了以前同事在項目中遇到的問題:比如我有一個功能使用者瀏覽的前10個頁面我要在頁面中顯示用於提示使用者瀏覽過的頁面,這裡面就用到了cookie,使用者瀏覽的頁面大於10個之後會做分割只取前10個,array_slice可以幫到你,array_slice切割完之後cookie中儲存的頁面資訊是不是減少了呢?可能會有這個疑問。帶著這個疑問咱們說說cookie的銷毀方式吧。

    cookie銷毀方式一:將cookie值設定為空白。

<?php
setcookie('site_name', '');
?> cookie銷毀方式二:將cookie值設定為到期時間。

<?php
setcookie('site_name', 'IT部落格', time() - 86400);
?>     看到這裡你說array_slice會不會切割cookie中的值,使cookie的值減少呢?

    下面說一說session:session是一種伺服器的機制,伺服器使用一種類似於散列表的結構來儲存資訊,每一個網站的訪客都會被賦予一個唯一的標識符進行識別(回話ID)。他的存放形式有兩種:1是url傳遞,2是cookie儲存。


    php中常用的session的函數中最重要的就是session_start(),沒有開啟session的話一切都免談。


    php.ini中也有一些session的設定比如:


    session.save_handler = files —— session的儲存形式以檔案形式儲存。

    session.save_path = “N;/path” ——— session檔案的儲存路徑,這個路徑需要自己建立且有寫入的許可權。其中N;/path中的N必須是一個整數這樣可以使session檔案儲存在不同的目錄中,這對於伺服器處理大量的session檔案是有協助的。

    session和cookie的區別:


    1.session儲存在伺服器端,通過session.save_path可以設定session檔案在伺服器的位置。

    2.cookie儲存在用戶端,分為臨時會話(關閉瀏覽器則銷毀,儲存在記憶體)、持久性會話(在有效期間內一直可以調用,儲存在硬碟上)。


    3.session相對cookie要安全一些,不過大量的session也會導致伺服器的壓力。


    session和cookie的聯絡:


    session的有效執行有兩種方式:一是與cookie進行互動,二是通過url傳遞。


 ps:sessionid是一個很有用有時候也會導致問題的一個標識,有一次通過ajax發送50多個請求通過socket請求資料,在php端socket返回資料有時候會比較慢,雖然ajax是非同步請求但是在php端就不一樣了,先來的會把後來的請求堵在後面,其中的標識符就是sessionid,由於這個sessionid導致了php端的順序處理增加了使用者的等待時間,致使使用者體驗較差。其中的解決方案是用session_write_close()斷開sessionid的連結。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.