我是業務愛好者,都是比較好奇什麼事,學什麼。
我問這個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的函數是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... 。
伺服器會在回應的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
頭:
<code>Cookie: hello=world</code>
如果有多個cookie還是只有一個Cookie
頭,各個cookie的名值對使用分號和空格;
來分隔。
不管你是AJAX請求,還是普通的POST和GET,只要cookie有效,瀏覽器就會傳送給伺服器。
PHP會解析頭訊息,並把cookie解析到$_COOKIE
數組中。我們就可以這樣存取名為hello
的cookie的值:
<code class="php">$_COOKIE['hello'];</code>
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
,服务端就知道,你是谁了。php
有setcookie
函数,还有$_COOKIE
来获取cookie
。cookie
是通过头部字段Cookies
和Set-Cookie
来传递的。所以php
也可以使用设置返回头和读取返回头来设置cookie
和读取cookie
。