萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php中cookie與session應用學習筆記

php中cookie與session應用學習筆記

在php中cookie與session的區別在於cookie數據保存在客戶端,session數據保存在服務器端了,自然在使用方法上會有些細節上的區別了,但後面比前者要安全得多。

1.cookie&session簡介和區別

cookie數據保存在客戶端,session數據保存在服務器端。

簡 單的說,當你登錄一個網站的時候,如果web服務器端使用的是session,那麼所有的數據都保存在服務器上面,客戶端每次請求服務器的時候會發送 當前會話的sessionid,服務器根據當前sessionid判斷相應的用戶數據標志,以確定用戶是否登錄,或具有某種權限。由於數據是存儲在服務器 上面,所以你不能偽造,但是如果你能夠獲取某個登錄用戶的sessionid,用特殊的浏覽器偽造該用戶的請求也是能夠成功的。sessionid是服務 器和客戶端鏈接時候隨機分配的,一般來說是不會有重復,但如果有大量的並發請求,也不是沒有重復的可能性,我曾經就遇到過一次。登錄某個網站,開始顯示的 是自己的信息,等一段時間超時了,一刷新,居然顯示了別人的信息。

如果浏覽器使用的是 cookie,那麼所有的數據都保存在浏覽器端,比如你登錄以後,服務器設置了 cookie用戶名(username),那麼,當你再次請求服務器的時候,浏覽器會將username一塊發送給服務器,這些變量有一定的特殊標記。服 務器會解釋為 cookie變量。所以只要不關閉浏覽器,那麼 cookie變量便一直是有效的,所以能夠保證長時間不掉線。如果你能夠截獲某個用戶的 cookie變量,然後偽造一個數據包發送過去,那麼服務器還是認為你是合法的。所以,使用 cookie被攻擊的可能性比較大。如果設置了的有效時間,那麼它會將 cookie保存在客戶端的硬盤上,下次再訪問該網站的時候,浏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然後發送給服務器。如果你在機器上面保存了某個論壇 cookie,有效期是一年,如果有人入侵你的機器,將你的  cookie拷走,然後放在他的浏覽器的目錄下面,那麼他登錄該網站的時候就是用你的的身份登錄的。所以 cookie是可以偽造的。當然,偽造的時候需要主意,直接copy   cookie文件到 cookie目錄,浏覽器是不認的,他有一個index.dat文件,存儲了 cookie文件的建立時間,以及是否有修改,所以你必須先要有該網站的 cookie文件,並且要從保證時間上騙過浏覽器,曾經在學校的vbb論壇上面做過試驗,copy別人的 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的值。


2.cookie的配置與應用

基本語法:setcookie("cookie", "cookievalue", time()+3600, "/forum", ".xxx.com", 1);
                      名字          值      有效時間,毫秒   路徑     保存域    是否使用https

訪問和處理cookie
訪問基本語法:

 代碼如下 復制代碼 echo $mycookie;
echo $cookiearray['0'];
echo $_COOKIE['mycookie'];   (推薦)
echo $HTTP_COOKIE_VARS['mycookie'];

刪除cookie
刪除基本語法:

 代碼如下 復制代碼 setcookie("cookie","");   (用空cookie覆蓋原值)
setcookie("cookie", "value", time()-1/time());   (時間銷毀)

實例:

 代碼如下 復制代碼

<?php
if ($_POST['user'] && $_POST['password']) {
 setcookie("us", $_POST['user']);
 setcookie("pwd", $_POST['password']);
 echo "用戶:".$_COOKIE['us']."<br />"."密碼:".$_COOKIE['pwd'];
}
?>

<form id="form1" name="form1" method="post" action="file.php">
   用戶:<input type="text" name="user" />
   <br />
   密碼:<input type="text" name="password" />
   <input type="submit" name="Submit" value="提交" />
</form>


注意:在輸出之前必須操作完cookie,否則error。

--------------------------------------------------------

1.session的配置與應用

基本語法:

 代碼如下 復制代碼 session_start();   //初始化,必須放在文件頭。
$_SESSION['name'] = value;   //配置session。
echo $_SESSION['name'];   //使用session。
isset($_SESSION['name']);   //判斷。
unset($_SESSION['name']);   //刪除。
session_destroy();   //銷毀所有session。

舉一些實例來介紹session與cookie上的區別

<一>:session


               啟動session:


                      session_start();


                       PS:該函數需要放在文件最前端,前面不要有任何輸出,最好頂頭寫(不要有前導空格).


              設置session:


                       $_SESSION['name']='value';


                       PS:在使用的時候,直接使用$_SESSION[]方法設置值,其中"[ ]"部分為session的name,"="後面為值.


               讀取session:


                      echo $_SESSION['name'];

                       PS:不論是設置session還是讀取session都要先開啟session(使用session_start()).

               銷毀session:


                       1.關閉浏覽器,自動銷毀.


                       2.直接給 $_SESSION[]=''; 清空.

 

 

       <二>:cookie


               設置cookie:


                      bool setcookie(string name[,string value[,int expire[,string path[,string domain[,bool secure[,bool httponly]]]]]] )

                           name:   cookie變量名

                           value:   cookie變量的值

                           expire:  有效期結束的時間,

                           path:    有效目錄,

                           domain: 有效域名,頂級域唯一

                           secure:  如果值為1,則cookie只能在https連接上有效,如果為默認值0,則http和https都可以.

               例如:

                       setcookie('username','hello',time()+3600);

                       setcookie("username",'hello',time()+3600,"/~rasmus/",".paea.cn",1);

                       PS:setcookie前不能出現輸出數據操作,否則就會出現錯誤類似於session_start().

              讀取cookie:

                       echo $_COOKIE['username'].'||';

                       echo $HTTP_COOKIE_VARS["username"];

                      PS:兩種輸出方式.

               銷毀cookie:


                       設置一個過去的時間來注銷cookie

                       setcookie('username','hello',time()-3600);

                       PS:setcookie前不能出現輸出數據操作,否則就會出現錯誤類似於session_start().

 

總結一下

作用:

 session和cookie都是用於暫時記錄用戶數據的方式.

區別:

1.SESSION存儲在服務器端,用戶無法進行修改,比較安全,COOKIE存儲在客戶端,用戶可以進行修改,不安全。

2.Session會在一定時間內保存在服務器上,會占用服務器資源。Cookie存儲在用戶windows下的Temp目錄中的。

3.單個cookie在客戶端的限制是4k

4.session遍歷使用$_SESSION[] ,cookie遍歷使用$_COOKIE[]

5.禁用過cookie後session無法使用

6.session使用的時候要加session_start()並且前面不能有任何輸出.

copyright © 萬盛學電腦網 all rights reserved