首頁  >  文章  >  後端開發  >  javascript - 誰和我說說,php 接受cookie 是怎麼回事,涉及那些函數?

javascript - 誰和我說說,php 接受cookie 是怎麼回事,涉及那些函數?

WBOY
WBOY原創
2016-12-01 00:56:39888瀏覽

我是業務愛好者,都是比較好奇什麼事,學什麼。

我問這個cookie是怎麼回事,
是不是就是從伺服器,驗證了對方的用戶名,密碼之後,回傳一個加密的字串,並且把這個字串存到伺服器資料庫。

以後使用者登入的時候,就不需要驗證id和密碼了,只驗證這個字串和資料庫的對不對的起來。過一段時間,就把資料庫的這個字串刪了。

原理應該就是這麼一回事吧。但我不懂的是,這個cookie怎麼從前段發過去的,我會用action提交post和get,也會用ajax傳數了。也會用url傳值。

請問在前段提交cookie的jQuery或html程式碼的相關函數有哪些。

還有從php伺服器端收cookie的相關函數有哪些,大家幫忙提供個關鍵字,我去搜搜,或者簡單講講注意事項,謝謝了。

回覆內容:

我是業務愛好者,都是比較好奇什麼事,學什麼。

我問這個cookie是怎麼回事,
是不是就是從伺服器,驗證了對方的用戶名,密碼之後,回傳一個加密的字串,並且把這個字串存到伺服器資料庫。

以後使用者登入的時候,就不需要驗證id和密碼了,只驗證這個字串和資料庫的對不對的起來。過一段時間,就把資料庫的這個字串刪了。

原理應該就是這麼一回事吧。但我不懂的是,這個cookie怎麼從前段發過去的,我會用action提交post和get,也會用ajax傳數了。也會用url傳值。

請問在前段提交cookie的jQuery或html程式碼的相關函數有哪些。

還有從php伺服器端收cookie的相關函數有哪些,大家幫忙提供個關鍵字,我去搜搜,或者簡單講講注意事項,謝謝了。

伺服器透過HTTP回應頭Set-Cookie來告訴使用者代理cookie的名稱、值、對應的路徑、有效期限等等,使用者代理(一般就是瀏覽器)保存下來後,當向後端請求資料時,就會把對應的cookie放到請求頭中發給伺服器。

前端也可以透過JS來設定cookie。

所以只要設定好cookie之後,瀏覽器會自動在請求時附上cookie,並不需要你主動提交。

PHP中設定cookie

PHP中設定Cookie的函數是setcookie(還有個setrawcookie並不常用)。

<code class="php">setcookie('hello', 'world', time()+3600, '/test/', 'example.com');</code>

這樣就設定了一個名為hello值為world,有效期限為當前時間加上3600秒(也就是1小時),網域名稱為example.com,路徑為/test/(代表代表只能在諸如http://example.com/test/a.php這樣的路徑下有效)的cookie。

具體參數請參考文件 http://php.net/manual/zh/func... 。

伺服器發送cookie

伺服器會在回應的HTTP頭中包含一個Set-Cookie頭:

<code>Set-Cookie: hello=world; Expires=Sun, 13 Nov 2016 11:30:00 GMT; Domain=example.com; Path=/test/</code>

其中過期時間(Expires)是使用GMT來表示,這裡我假設我是在北京時間2016年11月13日18:30:00(也就是GMT 2016年11月13日10:30:00)設定的Cookie,有效期限是1小時。

如果有多個cookie就會有多個Set-Cookie頭。

具體可參考 http://www.cnblogs.com/hdtian... 。

瀏覽器發送cookie

瀏覽器就會把這個Cookie保存下來。當下次再要求符合Cookie條件的位址時,瀏覽器就會在請求頭中包含一個Cookie頭:

<code>Cookie: hello=world</code>

如果有多個cookie還是只有一個Cookie頭,各個cookie的名值對使用分號和空格; 來分隔。

不管你是AJAX請求,還是普通的POST和GET,只要cookie有效,瀏覽器就會傳送給伺服器。

PHP接收處理cookie

PHP會解析頭訊息,並把cookie解析到$_COOKIE數組中。我們就可以這樣存取名為hello的cookie的值:

<code class="php">$_COOKIE['hello'];</code>

JS中操作cookie

JS中訪問cookie有點麻煩,因為沒有方便的介面來讀取、設定cookie。我們只能透過document.cookie來操作cookie。詳情請參考: https://developer.mozilla.org... 。

JS中读取cookie直接用document.cookie,但是得到的确实和上面浏览器发送cookie中的格式类似的字符串,就是用分号和空格隔开的名值对。

比如hello=world; PHPSESSID=web5~toqn2au0krlholat9c2c4aast3这样的。我们需要自己解析。

JS中设置cookie则是和上面服务器发送cookie类似,都要设置各个参数。比如:

<code class="javascript">document.cookie="hello=kitty; expires=Sun, 13 Nov 2016 12:00:00 GMT"</code>

这样就把hello的值改成了kitty,并且把过期时间延长了半个小时。

虽然看起来好像修改了document.cookie整个值,但实际上并不会影响到其他cookie。我们再次访问document.cookie将得到hello=kitty; PHPSESSID=web5~toqn2au0krlholat9c2c4aast3这样的结果。

要删除一个cookie,只要把过期时间设置在当前时间之前就行了。

因为HTTP设计是无状态的,所以就有了cookie来充当HTTP的状态。有了cookie,服务端就知道,你是谁了。phpsetcookie函数,还有$_COOKIE来获取cookiecookie是通过头部字段CookiesSet-Cookie来传递的。所以php也可以使用设置返回头和读取返回头来设置cookie和读取cookie

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn