這個太過抽象,也挺複雜的,只能說一下本身的理解。在b/s架構下,會話機制,其實就是服務器(server)和瀏覽器(browser)之間的對話的一種方式!這種對話方式,可以使得web站點可以對用戶的行爲進行追蹤,在同一個站點下用戶所需的數據實現共享!php
歸根究竟是因爲,b/s的訪問方式是基於http協議的,而http協議自己又是無狀態的,所謂無狀態,就是指服務器端沒法區分發起請求的是不是同一我的(有興趣的同窗能夠本身好好研究一下http的無狀態性)!每次請求都會被當作獨立的請求,並不能將兩次訪問聯繫到一塊兒!html
核心設計思想:容許服務器對同一個客戶端的的連續請求進行跟蹤,對同一個訪問者的請求數據,在多個頁面之間實現共享!jquery
1)在兩個頁面(較少頁面之間)經過$_GET或者$_POST數組之間實現數據的共享!
2)使用cookie將用戶的信息存放在客戶端的計算機中,用於保存並不重要的數據
3)經過session將用戶的信息保存在服務器中web
經過$_GET和$_POST方式得到數據較爲簡單,這裏就再也不介紹!跨域
1)當咱們經過setCookie()函數來新增或者改變cookie中的值的時候,setCookie()函數前面不可以有任何實際的輸出,即便是空格也不能夠!
這是由於setCookie()函數最終是改變http響應頭信息(咱們有理由相信setCookie()方法,底層就是經過header()方法進行的設置的頭信息),咱們都應該知道在header函數前面是不可以有任何實際的輸出的(除非是開啓了ob緩存)!數組
2)在cookie中是隻可以保存字符串的,可是,若是咱們想將一個數組變量保存到cookie中,在不進行序列化的狀況下,其實也是能夠辦到的,代碼以下:瀏覽器
<?php $expires = time()+3600; setcookie('user["name"]["xing"]','liang'); setcookie('user["name"]["ming"]', 'bo'); setcookie('user["age"]', '23', $expires); setcookie('user["addr"]','吉林', $expires); ?> <?php $name = $_COOKIE['name']; var_dump($name); ?> > 獲得的結果以下: > array(3) { > [""name""]=> > array(2) { > [""xing""]=> > string(5) "liang" > [""ming""]=> > string(2) "bo" > } > [""age""]=> > string(2) "23" > [""addr""]=> > string(6) "吉林" > }
3)cookie的$path參數,只有在指定的路徑下的網頁才能夠獲取cookie中的值!demo以下:緩存
<?php if(!$_COOKIE['name']) { $expires = time()+3600; setcookie('name','liangbo', $expires, '/talkphp/secondtalk/'); } ?>
該頁面所處的路徑"/",也就是網站的根目錄!服務器
接受的代碼以下:cookie
<?php header('Content-type:text/html;charset=utf-8'); $name = $_COOKIE['user']; var_dump($name); ?>
改代碼文件所在的路徑以下:/talkphp/secondtalk/
執行結果以下:string(7) "liangbo"
一樣的接受代碼:可是所處的路徑不一樣,是在根目錄「/」下,
獲得的結果以下:null
4)cookie的跨域問題:
我的認爲跨域問題,主要是值存在同一個網站下,有多個二級域名,在多個二級域名下cookie數據的共享問題!
在cookie中,若是設置的domain參數是一級域名的話,那麼cookie中的數據在各個二級域名之間是均可用的!demo以下:
<?php if(!$_COOKIE['name']) { $expires = time()+3600; setcookie('name','liangbo', $expires, '/talkphp/secondtalk/', '.test.com'); } ?>
<?php $name = $_COOKIE['name']; var_dump($name); ?>
該代碼所在的網站域名是:php.test.com 頁面路徑是:/talkphp/secondtalk/getcookie.php
運行結果以下:string(7) "liangbo"
一樣的代碼,該代碼所在的域名是:jquery.test.com 頁面所在的路徑是:/talkphp/secondtalk/getcookie.php
運行結果以下:string(7) "liangbo"
可見,若是domain參數中設置的是一級域名的話,那麼在各個二級域名之間$_COOKIE中的數據是能夠共享的
在一級域名中.test.com,中test前的"."實際上是能夠省略的,可是加上的話,瀏覽器的兼容會更好!
咱們來看另一種狀況:
<?php if(!$_COOKIE['name']) { $expires = time()+3600; setcookie('name','liangbo', $expires, '/talkphp/secondtalk/','php.test.com'); } ?>
這裏,咱們將domain設置爲了二級域名php.test.com
<?php $name = $_COOKIE['name']; var_dump($name); ?>
該代碼所在的網站域名是:php.test.com 頁面路徑是:/talkphp/secondtalk/getcookie.php
運行結果以下:string(7) "liangbo"
一樣的代碼,該代碼所在的域名是:jquery.test.com 頁面所在的路徑是:/talkphp/secondtalk/getcookie.php
運行的結果以下:null
可見,若是設置的domain參數是二級域名的話,那麼cookie中的數據只可以在該二級域名下面使用!