最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解PHP中的Session和Cookie

 更新時間:2013年06月21日 09:55:29   作者:  
本篇文章是對PHP中的Session和Cookie進行了詳細的分析介紹,需要的朋友參考下
在一個頁面設置一個cookie時,必須刷新或到下一個頁面才可以用 $_COOKIE 得到變量的值.
原因是因為當頁面第一次被瀏覽器訪問載入時,頁面中的 cookie 會被設置,將其發(fā)送存儲到客戶端指定的存儲位置,所以$_COOKIE沒有接收到客戶端發(fā)送過來的 cookie 變量的值,當刷新或到下一個頁面時,客戶端會在頁面程序在服務器端運行之前,發(fā)送與該地址相對應的 cookie到服務器端,所以 $_COOKIE 可以得到的值! 說白了就是當每一個頁面被訪問時,如果客戶端找到了與訪問地址相對應的 cookie 時,會在程序在服務器端運行之前發(fā)送這個 cookie 到服務器端. (個人對此的看法)
本人表達能力不強,如有不明,還請抱歉!

php中設置cookie數(shù)組的時候,不可以用像php中的那個添加數(shù)據(jù)的方法:
復制代碼 代碼如下:

<?php
setcookie('my_cookie[]', 1);
setcookie('my_cookie[]', 2);
print_r($_COOKIE);    // Array ( [my_cookie] => Array ( [0] => 1 ))
                      // 數(shù)組的值添加是添加成功了,不過索引沒有變,后面的數(shù)據(jù)將前的數(shù)據(jù)覆蓋了!
由此得到
       my_cookie[],默認指向數(shù)據(jù)的第一元素的位置,即索引為
0 的位置. 注意與php中的不一樣! 以后用cookie數(shù)據(jù)記住要指定數(shù)組元素索引哦!

$my_cookie[] = 1;
$my_cookie[] = 2;
print_r($my_cookie); //Array ( [0] => 1 [1] => 2)
?>

刪除 cookie 變量的兩個方法:
1.php
復制代碼 代碼如下:

<?php
setcookie('user_name_1', 'zhaofei299', time()+3600); // 生存期為 1 個小時
setcookie('user_name_2', 'ZHAOFEI299', time()+3600); // 生存期為 1 個小時
?>

2.php
復制代碼 代碼如下:

<?php
setcookie('user_name_1');                // 第一種               
setcookie('user_name_2', "", time()-1); // 第二種
print_r($_COOKIE);                       // 刷新頁面2下以上會輸出 Array ( [user_name_1] => )

/*為什么超級全局變量 $_COOKIE 中的 user_name_1 沒有被刪除(變量為空并不代表不存在),而
user_name_2被刪除了? 那是因為兩個刪除變量的方式不同!
第一種: 是設置了 cookie 的生存期, 只不過是將它的值默認設置為空,生存期為與瀏覽器一樣,瀏覽器
關閉時,cookie才會刪除!所以當重新打開一個瀏覽器,輸出地址時,才會發(fā)現(xiàn) cookie 變量全部被刪除了!
將2.php 中兩個 setcookie() 函數(shù)部分注釋掉看看(重新輸出了地址)!
第二種: 也是設置了 cookie 的生存期,是使 cookie 的生存期一定過期, cookie 也就被刪除,所以刷
新頁面,客戶端向服務器端發(fā)送 cookie 時, $_COOKIE 并沒有能夠得到該cookie變量的值!
*/
?>

會話id默認儲放在客戶端Cookie中!
復制代碼 代碼如下:

<?php
session_start();
print_r($_COOKIE);
?>

cookie的設置有兩種方法
header('set-cookie:user=zhaofei299');
setcookie('user', 'zhaofei299');
會話變量不能被GET數(shù)據(jù)或POST數(shù)據(jù)重載!
使用session變量傳遞數(shù)組,對象時無需序列化!
使用session變量傳遞對象時,在調(diào)用session_start()之前,必須包含該對類對象的定義,反序列化
(serialize)也是如此!
刪除單個會話變量可以使用unset($_SESSION['***']) 直接刪除!
刪除所有的會話變量不可以用unset($_SESSION),因為這樣會將所有的會話信息刪除,包含存儲在COOKIE
中的PHPSESSID,也就是破壞了兩個頁面之間的會話聯(lián)系,應該使用$_SESSION = array();
消除會話id,使頁面之間失去聯(lián)系!
session_destroy();
程序清單1.1
復制代碼 代碼如下:

<?php
session_start();
header('content-type:text/html;charset=utf-8');
$_SESSION['a'] = 'a';
$_SESSION['b'] = 'b';
unset($_SESSION);        //測試后,再注釋下看看
$_SESSION['user'] = 'zhaofei299';
echo 'SESSION_ID: '.session_id().'<br />';
echo '<a href="3.php" target="_blank">測試下</a>';
?>

復制代碼 代碼如下:

<?php
session_start();
echo $_SESSION['user'];
echo session_id();         //會話變量改變了
?>

會話id(session_id)的兩種方式傳遞:
1.cookie
2.url
因為默認session是基于cookie的,而cookie又是跟隨http協(xié)議發(fā)送的,所以與cookie一樣,在
session_start()之前不能有任何輸出!
現(xiàn)在主要說一說第二種,通過 url 傳遞會話id
php中已經(jīng)定義SID這個常量來得到 會話的id
sesssin_id 的使用!
復制代碼 代碼如下:

<?php
session_start();
echo defined('SID')?'true':'false'; // true
echo SID; //什么也沒有?
?>

為什么SID的值會是null 呢?是它哪里有問題了?
原因是因為 session 默認是基于 cookie 的,而 SID 只有 session_id 通過 url
傳遞數(shù)據(jù)時才會被賦值!
在瀏覽器中將 cookie 禁用,你就會發(fā)現(xiàn) SID 有了輸出,而不是 null!
刪除session
要三步實現(xiàn).
復制代碼 代碼如下:

<?php
session_destroy();                         // 第一步: 刪除服務器端session文件,這使用
setcookie(session_name(),'',time()-3600); // 第二步: 刪除實際的session:
$_SESSION = array();                       // 第三步: 刪除$_SESSION全局變量數(shù)組
?>

大家都知道session變量是保存在服務器端的,也就是說session的變量會保存在服務器中一個目錄中,我
們可以在php.ini中的session.save_path 那里可以找到session文件中保存的地址.

默認的session的生存期是瀏覽的關閉就結束,但要知道會話過期結束后,當打開頁面session_start()會
判斷會話id 是否存在,如果不存在就創(chuàng)建一個,否則將該會話id 的變量載入頁面!因為過期session_id會
被創(chuàng)建一個新的,但它保存在服務器端的session文件并沒有被刪除(關閉瀏覽器,打開session文件保存
地看看),所以要用session_destory()函數(shù)清除會話id,并同時清除相應的會話文件,這樣的話才能做到最
徹底的清除!

session_id 使用 url 傳遞session 變量數(shù)據(jù)時,因為session_start()開啟會話時會判斷會話id 是否存
在,如果不存在就創(chuàng)建一個,否則將該會話id 的變量載入頁面!

而現(xiàn)在是使用url 來傳遞session_id,然而每一次 刷新/進入頁面 都會生成一個會話id,所以頁面之間就
不能得到在另一頁面設置過的session_id 的變量,那么使用 session也就沒什么意義了!

解決方法:在session_start()之前,手動設置頁面的session_id,這樣頁面的就可以得到前一頁中所設置的
session變量的,也就實現(xiàn)了會話的傳遞,如下代碼可以說明!
//已禁用 cookie
1.php
復制代碼 代碼如下:

<?php
session_start();
$_SESSION['user'] = 'zhaofei299';
echo '<a href="2.php?'.SID.'">下一頁</a>';
?>

1.php的第4行代碼也可以寫成:echo '<a href="2.php">下一頁</a>';
可以設置php.ini 中的 session.use_trans_sid 為1,這樣當使用 url 傳遞會話 id 時,
瀏覽器會自動將 session_id 追加到 url 的后面!
就好像 在瀏覽器中 輸入: www.baidu.com 一樣,瀏覽器會自動將其更換成 http://www.baidu.com/

2.php
復制代碼 代碼如下:

<?php
session_id($_GET['PHPSESSID']);   // 手動設置session_id,這種就可以使用前一個頁面的
session_id 的變量了,也就實現(xiàn)了會話!
session_start();
print_r($_SESSION);
?>

常用session函數(shù):
復制代碼 代碼如下:

bool   session_start(void); 初始化session
bool   session_destroy(void): 刪除服務器端session關聯(lián)文件。
string session_id() 當前session的id
string session_name() 當前存取的session名稱,也就是客戶端保存session ID的cookie名稱.默認
PHPSESSID。
array session_get_cookie_params() 與這個session相關聯(lián)的session的細節(jié).
string session_cache_limiter() 控制使用session的頁面的客戶端緩存
ini    session_cache_expire() 控制客戶端緩存時間
bool   session_destroy()     刪除服務器端保存session信息的文件
void   session_set_cookie_params ( int lifetime [, string path [, string domain [, bool
secure [, bool httponly]]]] )設置與這個session相關聯(lián)的session的細節(jié)
bool session_set_save_handler ( callback open, callback close, callback read, callback
write, callback destroy, callback gc )定義處理session的函數(shù),(不是使用默認的方式)
bool session_regenerate_id([bool delete_old_session]) 分配新的session id 

相關文章

  • 使用PHP實現(xiàn)圖片上傳接口的實例代碼

    使用PHP實現(xiàn)圖片上傳接口的實例代碼

    在Web開發(fā)中,圖片上傳是一個常見的功能,無論是用戶頭像的上傳,還是內(nèi)容的圖片插入,都需要使用到圖片上傳的功能,在這篇文章中,我們將詳細介紹如何使用PHP實現(xiàn)圖片上傳接口,需要的朋友可以參考下
    2024-03-03
  • 在php中實現(xiàn)限流ip次數(shù)以及允許部分ip訪問的代碼示例

    在php中實現(xiàn)限流ip次數(shù)以及允許部分ip訪問的代碼示例

    這篇文章給大家介紹了如何在php中實現(xiàn)限流ip次數(shù)以及允許部分ip訪問,文中通過代碼示例給大家介紹的非常詳細,對大家的學習具有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • php簡單實現(xiàn)多字節(jié)字符串翻轉的方法

    php簡單實現(xiàn)多字節(jié)字符串翻轉的方法

    這篇文章主要介紹了php簡單實現(xiàn)多字節(jié)字符串翻轉的方法,涉及php操作字符串的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • PHP文件操作實例總結

    PHP文件操作實例總結

    這篇文章主要介紹了PHP文件操作,結合實例形式總結分析了php關于文件讀寫操作的常見函數(shù)及使用技巧,需要的朋友可以參考下
    2016-09-09
  • 配置eAccelerator和XCache擴展來加速PHP程序的執(zhí)行

    配置eAccelerator和XCache擴展來加速PHP程序的執(zhí)行

    這篇文章主要介紹了配置eAccelerator和XCache擴展來加速PHP程序的執(zhí)行的方法,XCache和PHP5.5以來自帶的Zend Opcache一樣都是在共享內(nèi)存中存儲Opcode的緩存器,需要的朋友可以參考下
    2015-12-12
  • PHP獲取文件擴展名的方法實例總結

    PHP獲取文件擴展名的方法實例總結

    這篇文章主要介紹了PHP獲取文件擴展名的方法,結合實例形式總結了6種常用的文件擴展名獲取方法,代碼備有較為詳細的注釋便于理解,需要的朋友可以參考下
    2017-06-06
  • PHP獲取客戶端及服務器端IP的封裝類

    PHP獲取客戶端及服務器端IP的封裝類

    這篇文章主要介紹了PHP獲取客戶端及服務器端IP的封裝類,簡單分析了php使用服務器預定義變量的基本用法并進行了簡單封裝,需要的朋友可以參考下
    2016-07-07
  • 幾個實用的PHP內(nèi)置函數(shù)使用指南

    幾個實用的PHP內(nèi)置函數(shù)使用指南

    本文給大家推薦了7個不經(jīng)常被用到,但實際很實用,功能很強大的php內(nèi)置函數(shù),用好了,可以省去小伙伴們很多的時間的。
    2014-11-11
  • php生成圓角圖片的方法

    php生成圓角圖片的方法

    這篇文章主要介紹了php生成圓角圖片的方法,涉及php操作圖片的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • PHP區(qū)塊查詢實現(xiàn)方法分析

    PHP區(qū)塊查詢實現(xiàn)方法分析

    這篇文章主要介紹了PHP區(qū)塊查詢實現(xiàn)方法,結合實例形式簡單分析了php區(qū)塊查詢的概念、原理、實現(xiàn)與使用操作技巧,需要的朋友可以參考下
    2018-05-05

最新評論

高邮市| 涞水县| 东丰县| 邹城市| 汉中市| 集贤县| 河东区| 长乐市| 兴城市| 东城区| 巴中市| 游戏| 略阳县| 霍林郭勒市| 湖南省| 灌云县| 新龙县| 拜城县| 杭州市| 禹城市| 安宁市| 荥经县| 仪陇县| 攀枝花市| 上饶县| 剑川县| 徐闻县| 石门县| 咸丰县| 汉寿县| 社会| 揭西县| 宁晋县| 叙永县| 云梦县| 福建省| 凤山县| 和田县| 星子县| 泊头市| 迭部县|