PHP中會話管理Cookie和Session的例子

來源:互聯網
上載者:User

 

會話管理是web開發的一項重要內容,包括Session和Cookie兩種技術。本章介紹Cookie和Session的建立和使用。

Cookie:

cookie 常用於識別使用者。cookie 是伺服器留在使用者電腦中的小檔案。每當相同的電腦通過瀏覽器請求頁面時,它同時會發送 cookie。通過 PHP能夠建立並取回 cookie 的值。cookie 只能讀取所在域,單一域不能超過20個cookie,每個cookie檔案長度上限位4k位元組,瀏覽器最多儲存300個cookie。

cookie的建立:

setcookie() 函數用於設定 cookie。注意:setcookie() 函數必須位於標籤之前。

文法:

/**
* name:必需。規定 cookie 的名稱。
* value:必需。規定 cookie 的值。
* expire:可選。規定 cookie 的有效期間。
* path:可選。規定 cookie 的伺服器路徑。
* domain:可選。規定 cookie 的網域名稱。
* secure:可選。規定是否通過安全的 HTTPS 串連來傳輸 cookie。
*/
setcookie(name,value,expire,path,domain,secure)
注釋:在發送cookie時,cookie的值會自動進行URL編碼。接收時會進行URL解碼。

例子:

1.設定並發送 cookie:

<?php
$value = "my cookie value";
 
// 發送一個簡單的 cookie
//cookie24小時到期
setcookie("TestCookie", $value, time()+3600*24);
?>
 

...
...
2.檢索出 cookie 值的不同方法:




 
<?php
 
// 輸出個別的 cookie
echo $_COOKIE["TestCookie"];
echo "
";
echo $HTTP_COOKIE_VARS["TestCookie"];
echo "
";
 
// 輸出所有 cookie
print_r($_COOKIE);
?>
 

3.輸出

my cookie value
my cookie value
Array ([TestCookie] => my cookie value)

4.刪除 cookie

通過把失效日期設定為過去的日期/時間,刪除一個 cookie:


<?php
// set the expiration date to one hour ago
setcookie("TestCookie", "", time()-3600);
?>

Session:

PHP session 變數用於儲存有關使用者會話的資訊,或更改使用者會話的設定。Session 變數儲存的資訊是單一使用者的,並且可供應用程式中的所有頁面使用。Session 的工作機制是:為每個訪問者建立一個唯一的 id (UID),並基於這個 UID 來儲存變數。UID 儲存在 cookie 中,亦或通過 URL 進行傳導。

session的建立:

在您把使用者資訊儲存到 PHP session 中之前,首先必須啟動會話。session_start() 函數必須位於標籤之前。

文法:

session_start();

例子:

1.開始session

<?php session_start(); ?>
 


 

2.儲存 session 變數

儲存和取回 session 變數的正確方法是使用 $_SESSION 變數:


<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
 


 
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
 

3.輸出

Pageviews=1

4.終結 session
如果您希望刪除某些 session 資料,可以使用 unset() 或 session_destroy() 函數。
unset() 函數用於釋放指定的 session 變數:

<?php
unset($_SESSION['views']);
?>

您也可以通過 session_destroy() 函數徹底終結 session:


<?php
session_destroy();
?>

通過session設定使用者登入後的顯示資訊

在網站的頂部通常會有使用者登入和註冊的入口,還有在使用者登入之後,要顯示出使用者的資訊,如帳號,還有將登入入口變為退出;

在使用symphony模板中,可以使用如下代碼:

<span>您好</span><span style="color:#009cff;">{{ app.session.get('member_name') }}</span><span>,歡迎來到**網!</span>
 
{% if app.session.get('member_name') == null %}
<li><a href="{{ path('zm_member_login') }}">登入</a></li>
<li><a href="{{ path('zm_member_register') }}">註冊</a></li>
{% elseif app.session.get('member_name') != "" %}
 
<li><a href="{{ path('zm_member_logout') }}">退出</a></li>
 
{% endif %}
一開始使用{% if app.session.get(‘member_name’) ==“”%}

後來總報錯,之後將改成null,即可以判斷成功是否有使用者的登入session。

 

PHP中SESSION與COOKIE的區別

 這兩者,區別和聯絡其實也挺深奧的,總是瞭解一些皮毛,每次都得上網查,今天寫下來,每隔段時間就看看,加深記憶。
    Session是由應用伺服器維持的一個伺服器端的儲存空間,使用者在串連伺服器時,會由伺服器產生一個唯一的SessionID,用該SessionID 為標識符來存取伺服器端的Session儲存空間。而SessionID這一資料則是儲存到用戶端,用Cookie儲存的,使用者提交頁面時,會將這一 SessionID提交到伺服器端,來存取Session資料。這一過程,是不用開發人員幹預的。所以一旦用戶端禁用Cookie,那麼Session也會失效。

    伺服器也可以通過URL重寫的方式來傳遞SessionID的值,因此不是完全依賴Cookie。如果用戶端Cookie禁用,則伺服器可以自動通過重寫URL的方式來儲存Session的值,並且這個過程對程式員透明。

    可以試一下,即使不寫Cookie,在使用request.getCookies();取出的Cookie數組的長度也是1,而這個Cookie的名字就是JSESSIONID,還有一個很長的二進位的字串,是SessionID的值。

    大家都知道,http是無狀態的協議,客戶每次讀取web頁面時,伺服器都開啟新的會話,而且伺服器也不會自動維護客戶的上下文資訊,那麼要怎麼才能實現網上商店中的購物車呢,session就是一種儲存上下文資訊的機制,它是針對每一個使用者的,變數的值儲存在伺服器端,通過SessionID來區分不同的客戶,session是以cookie或URL重寫為基礎的,預設使用cookie來實現,系統會創造一個名為JSESSIONID的輸出cookie,我們叫做session cookie,以區別persistent cookies,也就是我們通常所說的cookie,注意session cookie是儲存於瀏覽器記憶體中的,並不是寫到硬碟上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但是當我們把瀏覽器的cookie禁止後,web伺服器會採用URL重寫的方式傳遞Sessionid,我們就可以在地址欄看到sessionid=KWJHUG6JJM65HS2K6之類的字串。

    明白了原理,我們就可以很容易的分辨出persistent cookies和session cookie的區別了,網上那些關於兩者安全性的討論也就一目瞭然了,session cookie針對某一次會話而言,會話結束session cookie也就隨著消失了,而persistent cookie只是存在於用戶端硬碟上的一段文本(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站指令碼攻擊,自然不如session cookie安全了。

    通常session cookie是不能跨視窗使用的,當你新開了一個瀏覽器視窗進入相同頁面時,系統會賦予你一個新的sessionid,這樣我們資訊共用的目的就達不到了,此時我們可以先把sessionid儲存在persistent cookie中,然後在新視窗中讀出來,就可以得到上一個視窗SessionID了,這樣通過session cookie和persistent cookie的結合我們就實現了跨視窗的session tracking(會話跟蹤)。

    在一些web開發的書中,往往只是簡單的把Session和cookie作為兩種並列的http傳送資訊的方式,session cookies位於伺服器端,persistent cookie位於用戶端,可是session又是以cookie為基礎的,明白的兩者之間的聯絡和區別,我們就不難選擇合適的技術來開發web service了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.